diff --git a/src/share/classes/javax/sql/rowset/serial/SerialBlob.java b/src/share/classes/javax/sql/rowset/serial/SerialBlob.java index 4c5a6b867a98eb243e3acc0b0bd321f2963d4d7f..93807602663c7403ec049e184eaeb1cf4ed7bf6d 100644 --- a/src/share/classes/javax/sql/rowset/serial/SerialBlob.java +++ b/src/share/classes/javax/sql/rowset/serial/SerialBlob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,7 +66,7 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * value of this SerialBlob object. * @serial */ - private byte buf[]; + private byte[] buf; /** * The internal representation of the Blob object on which this @@ -102,12 +102,13 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * @throws SerialException if an error occurs during serialization * @throws SQLException if a SQL errors occurs */ - public SerialBlob(byte[] b) throws SerialException, SQLException { + public SerialBlob(byte[] b) + throws SerialException, SQLException { len = b.length; buf = new byte[(int)len]; for(int i = 0; i < len; i++) { - buf[i] = b[i]; + buf[i] = b[i]; } origLen = len; } @@ -132,19 +133,17 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * to this constructor is a null. * @see java.sql.Blob */ - public SerialBlob (Blob blob) throws SerialException, SQLException { + public SerialBlob (Blob blob) + throws SerialException, SQLException { if (blob == null) { - throw new SQLException("Cannot instantiate a SerialBlob " + - "object with a null Blob object"); + throw new SQLException( + "Cannot instantiate a SerialBlob object with a null Blob object"); } len = blob.length(); buf = blob.getBytes(1, (int)len ); this.blob = blob; - - //if ( len < 10240000) - // len = 10240000; origLen = len; } @@ -245,7 +244,8 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * value from the database */ public long position(byte[] pattern, long start) - throws SerialException, SQLException { + throws SerialException, SQLException { + isValid(); if (start < 1 || start > len) { return -1; @@ -290,7 +290,7 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * value from the database */ public long position(Blob pattern, long start) - throws SerialException, SQLException { + throws SerialException, SQLException { isValid(); return position(pattern.getBytes(1, (int)(pattern.length())), start); } @@ -316,8 +316,8 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * @see #getBytes */ public int setBytes(long pos, byte[] bytes) - throws SerialException, SQLException { - return (setBytes(pos, bytes, 0, bytes.length)); + throws SerialException, SQLException { + return setBytes(pos, bytes, 0, bytes.length); } /** @@ -352,7 +352,7 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * @see #getBytes */ public int setBytes(long pos, byte[] bytes, int offset, int length) - throws SerialException, SQLException { + throws SerialException, SQLException { isValid(); if (offset < 0 || offset > bytes.length) { @@ -369,7 +369,7 @@ public class SerialBlob implements Blob, Serializable, Cloneable { if ((length + offset) > bytes.length) { throw new SerialException("Invalid OffSet. Cannot have combined offset " + - "and length that is greater that the Blob buffer"); + "and length that is greater that the Blob buffer"); } int i = 0; @@ -402,7 +402,8 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * @see #getBinaryStream */ public java.io.OutputStream setBinaryStream(long pos) - throws SerialException, SQLException { + throws SerialException, SQLException { + isValid(); if (this.blob != null) { return this.blob.setBinaryStream(pos); @@ -425,17 +426,16 @@ public class SerialBlob implements Blob, Serializable, Cloneable { * if {@code free} had previously been called on this object */ public void truncate(long length) throws SerialException { - isValid(); if (length > len) { - throw new SerialException - ("Length more than what can be truncated"); + throw new SerialException( + "Length more than what can be truncated"); } else if((int)length == 0) { - buf = new byte[0]; - len = length; + buf = new byte[0]; + len = length; } else { - len = length; - buf = this.getBytes(1, (int)len); + len = length; + buf = this.getBytes(1, (int)len); } } @@ -466,8 +466,8 @@ public class SerialBlob implements Blob, Serializable, Cloneable { throw new SerialException("Invalid position in BLOB object set"); } if (length < 1 || length > len - pos + 1) { - throw new SerialException("length is < 1 or pos + length >" - + "total number of bytes"); + throw new SerialException( + "length is < 1 or pos + length > total number of bytes"); } return new ByteArrayInputStream(buf, (int) pos - 1, (int) length); } @@ -536,14 +536,13 @@ public class SerialBlob implements Blob, Serializable, Cloneable { public Object clone() { try { SerialBlob sb = (SerialBlob) super.clone(); - sb.buf = (buf != null) ? Arrays.copyOf(buf, (int)len) : null; + sb.buf = (buf != null) ? Arrays.copyOf(buf, (int)len) : null; sb.blob = null; return sb; } catch (CloneNotSupportedException ex) { // this shouldn't happen, since we are Cloneable throw new InternalError(); } - } /** @@ -554,15 +553,15 @@ public class SerialBlob implements Blob, Serializable, Cloneable { throws IOException, ClassNotFoundException { ObjectInputStream.GetField fields = s.readFields(); - byte[] tmp = (byte[])fields.get("buf", null); - if (tmp == null) - throw new InvalidObjectException("buf is null and should not be!"); - buf = tmp.clone(); - len = fields.get("len", 0L); - if (buf.length != len) - throw new InvalidObjectException("buf is not the expected size"); - origLen = fields.get("origLen", 0L); - blob = (Blob) fields.get("blob", null); + byte[] tmp = (byte[])fields.get("buf", null); + if (tmp == null) + throw new InvalidObjectException("buf is null and should not be!"); + buf = tmp.clone(); + len = fields.get("len", 0L); + if (buf.length != len) + throw new InvalidObjectException("buf is not the expected size"); + origLen = fields.get("origLen", 0L); + blob = (Blob) fields.get("blob", null); } /** @@ -590,8 +589,8 @@ public class SerialBlob implements Blob, Serializable, Cloneable { */ private void isValid() throws SerialException { if (buf == null) { - throw new SerialException("Error: You cannot call a method on a " - + "SerialBlob instance once free() has been called."); + throw new SerialException("Error: You cannot call a method on a " + + "SerialBlob instance once free() has been called."); } } diff --git a/src/windows/classes/java/util/prefs/WindowsPreferences.java b/src/windows/classes/java/util/prefs/WindowsPreferences.java index 53678e5424adab8f2b479ebf6c6e25099f3a8f15..6c0e8f3f7e58d3a19ab38cc09984fa4ea34d08bd 100644 --- a/src/windows/classes/java/util/prefs/WindowsPreferences.java +++ b/src/windows/classes/java/util/prefs/WindowsPreferences.java @@ -53,8 +53,8 @@ class WindowsPreferences extends AbstractPreferences{ /** * Windows registry path to Preferences's root nodes. */ - private static final byte[] WINDOWS_ROOT_PATH - = stringToByteArray("Software\\JavaSoft\\Prefs"); + private static final byte[] WINDOWS_ROOT_PATH = + stringToByteArray("Software\\JavaSoft\\Prefs"); /** * Windows handles to HKEY_CURRENT_USER and @@ -138,12 +138,12 @@ class WindowsPreferences extends AbstractPreferences{ * Java wrapper for Windows registry API RegOpenKey() */ private static native int[] WindowsRegOpenKey(int hKey, byte[] subKey, - int securityMask); + int securityMask); /** * Retries RegOpenKey() MAX_ATTEMPTS times before giving up. */ private static int[] WindowsRegOpenKey1(int hKey, byte[] subKey, - int securityMask) { + int securityMask) { int[] result = WindowsRegOpenKey(hKey, subKey, securityMask); if (result[ERROR_CODE] == ERROR_SUCCESS) { return result; @@ -158,16 +158,16 @@ class WindowsPreferences extends AbstractPreferences{ } else if (result[ERROR_CODE] != ERROR_ACCESS_DENIED) { long sleepTime = INIT_SLEEP_TIME; for (int i = 0; i < MAX_ATTEMPTS; i++) { - try { - Thread.sleep(sleepTime); - } catch(InterruptedException e) { - return result; - } - sleepTime *= 2; - result = WindowsRegOpenKey(hKey, subKey, securityMask); - if (result[ERROR_CODE] == ERROR_SUCCESS) { - return result; - } + try { + Thread.sleep(sleepTime); + } catch(InterruptedException e) { + return result; + } + sleepTime *= 2; + result = WindowsRegOpenKey(hKey, subKey, securityMask); + if (result[ERROR_CODE] == ERROR_SUCCESS) { + return result; + } } } return result; @@ -189,10 +189,10 @@ class WindowsPreferences extends AbstractPreferences{ private static int[] WindowsRegCreateKeyEx1(int hKey, byte[] subKey) { int[] result = WindowsRegCreateKeyEx(hKey, subKey); if (result[ERROR_CODE] == ERROR_SUCCESS) { - return result; - } else { - long sleepTime = INIT_SLEEP_TIME; - for (int i = 0; i < MAX_ATTEMPTS; i++) { + return result; + } else { + long sleepTime = INIT_SLEEP_TIME; + for (int i = 0; i < MAX_ATTEMPTS; i++) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { @@ -201,7 +201,7 @@ class WindowsPreferences extends AbstractPreferences{ sleepTime *= 2; result = WindowsRegCreateKeyEx(hKey, subKey); if (result[ERROR_CODE] == ERROR_SUCCESS) { - return result; + return result; } } } @@ -223,10 +223,10 @@ class WindowsPreferences extends AbstractPreferences{ private static int WindowsRegFlushKey1(int hKey) { int result = WindowsRegFlushKey(hKey); if (result == ERROR_SUCCESS) { - return result; - } else { - long sleepTime = INIT_SLEEP_TIME; - for (int i = 0; i < MAX_ATTEMPTS; i++) { + return result; + } else { + long sleepTime = INIT_SLEEP_TIME; + for (int i = 0; i < MAX_ATTEMPTS; i++) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { @@ -235,7 +235,7 @@ class WindowsPreferences extends AbstractPreferences{ sleepTime *= 2; result = WindowsRegFlushKey(hKey); if (result == ERROR_SUCCESS) { - return result; + return result; } } } @@ -246,23 +246,23 @@ class WindowsPreferences extends AbstractPreferences{ * Java wrapper for Windows registry API RegQueryValueEx() */ private static native byte[] WindowsRegQueryValueEx(int hKey, - byte[] valueName); + byte[] valueName); /** * Java wrapper for Windows registry API RegSetValueEx() */ private static native int WindowsRegSetValueEx(int hKey, byte[] valueName, - byte[] value); + byte[] value); /** * Retries RegSetValueEx() MAX_ATTEMPTS times before giving up. */ private static int WindowsRegSetValueEx1(int hKey, byte[] valueName, - byte[] value) { + byte[] value) { int result = WindowsRegSetValueEx(hKey, valueName, value); if (result == ERROR_SUCCESS) { - return result; - } else { - long sleepTime = INIT_SLEEP_TIME; - for (int i = 0; i < MAX_ATTEMPTS; i++) { + return result; + } else { + long sleepTime = INIT_SLEEP_TIME; + for (int i = 0; i < MAX_ATTEMPTS; i++) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { @@ -271,7 +271,7 @@ class WindowsPreferences extends AbstractPreferences{ sleepTime *= 2; result = WindowsRegSetValueEx(hKey, valueName, value); if (result == ERROR_SUCCESS) { - return result; + return result; } } } @@ -294,10 +294,10 @@ class WindowsPreferences extends AbstractPreferences{ private static int[] WindowsRegQueryInfoKey1(int hKey) { int[] result = WindowsRegQueryInfoKey(hKey); if (result[ERROR_CODE] == ERROR_SUCCESS) { - return result; - } else { - long sleepTime = INIT_SLEEP_TIME; - for (int i = 0; i < MAX_ATTEMPTS; i++) { + return result; + } else { + long sleepTime = INIT_SLEEP_TIME; + for (int i = 0; i < MAX_ATTEMPTS; i++) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { @@ -306,7 +306,7 @@ class WindowsPreferences extends AbstractPreferences{ sleepTime *= 2; result = WindowsRegQueryInfoKey(hKey); if (result[ERROR_CODE] == ERROR_SUCCESS) { - return result; + return result; } } } @@ -317,19 +317,19 @@ class WindowsPreferences extends AbstractPreferences{ * Java wrapper for Windows registry API RegEnumKeyEx() */ private static native byte[] WindowsRegEnumKeyEx(int hKey, int subKeyIndex, - int maxKeyLength); + int maxKeyLength); /** * Retries RegEnumKeyEx() MAX_ATTEMPTS times before giving up. */ private static byte[] WindowsRegEnumKeyEx1(int hKey, int subKeyIndex, - int maxKeyLength) { + int maxKeyLength) { byte[] result = WindowsRegEnumKeyEx(hKey, subKeyIndex, maxKeyLength); if (result != null) { - return result; - } else { - long sleepTime = INIT_SLEEP_TIME; - for (int i = 0; i < MAX_ATTEMPTS; i++) { + return result; + } else { + long sleepTime = INIT_SLEEP_TIME; + for (int i = 0; i < MAX_ATTEMPTS; i++) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { @@ -338,7 +338,7 @@ class WindowsPreferences extends AbstractPreferences{ sleepTime *= 2; result = WindowsRegEnumKeyEx(hKey, subKeyIndex, maxKeyLength); if (result != null) { - return result; + return result; } } } @@ -349,19 +349,19 @@ class WindowsPreferences extends AbstractPreferences{ * Java wrapper for Windows registry API RegEnumValue() */ private static native byte[] WindowsRegEnumValue(int hKey, int valueIndex, - int maxValueNameLength); + int maxValueNameLength); /** * Retries RegEnumValueEx() MAX_ATTEMPTS times before giving up. */ private static byte[] WindowsRegEnumValue1(int hKey, int valueIndex, - int maxValueNameLength) { + int maxValueNameLength) { byte[] result = WindowsRegEnumValue(hKey, valueIndex, - maxValueNameLength); + maxValueNameLength); if (result != null) { - return result; - } else { - long sleepTime = INIT_SLEEP_TIME; - for (int i = 0; i < MAX_ATTEMPTS; i++) { + return result; + } else { + long sleepTime = INIT_SLEEP_TIME; + for (int i = 0; i < MAX_ATTEMPTS; i++) { try { Thread.sleep(sleepTime); } catch(InterruptedException e) { @@ -369,9 +369,9 @@ class WindowsPreferences extends AbstractPreferences{ } sleepTime *= 2; result = WindowsRegEnumValue(hKey, valueIndex, - maxValueNameLength); + maxValueNameLength); if (result != null) { - return result; + return result; } } } @@ -395,11 +395,11 @@ class WindowsPreferences extends AbstractPreferences{ int[] result = WindowsRegCreateKeyEx1(parentNativeHandle, toWindowsName(name)); if (result[ERROR_CODE] != ERROR_SUCCESS) { - logger().warning("Could not create windows registry " - + "node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegCreateKeyEx(...) returned error code " + - result[ERROR_CODE] + "."); + logger().warning("Could not create windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + Integer.toHexString(rootNativeHandle()) + + ". Windows RegCreateKeyEx(...) returned error code " + + result[ERROR_CODE] + "."); isBackingStoreAvailable = false; return; } @@ -417,15 +417,15 @@ class WindowsPreferences extends AbstractPreferences{ * @param rootDirectory Path to root directory, as a byte-encoded string. */ private WindowsPreferences(int rootNativeHandle, byte[] rootDirectory) { - super(null,""); + super(null, ""); int[] result = WindowsRegCreateKeyEx1(rootNativeHandle, rootDirectory); if (result[ERROR_CODE] != ERROR_SUCCESS) { logger().warning("Could not open/create prefs root node " + - byteArrayToString(windowsAbsolutePath()) + " at root 0x" + - Integer.toHexString(rootNativeHandle()) + - ". Windows RegCreateKeyEx(...) returned error code " + - result[ERROR_CODE] + "."); + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + Integer.toHexString(rootNativeHandle()) + + ". Windows RegCreateKeyEx(...) returned error code " + + result[ERROR_CODE] + "."); isBackingStoreAvailable = false; return; } @@ -442,7 +442,7 @@ class WindowsPreferences extends AbstractPreferences{ private byte[] windowsAbsolutePath() { ByteArrayOutputStream bstream = new ByteArrayOutputStream(); bstream.write(WINDOWS_ROOT_PATH, 0, WINDOWS_ROOT_PATH.length-1); - StringTokenizer tokenizer = new StringTokenizer(absolutePath(),"/"); + StringTokenizer tokenizer = new StringTokenizer(absolutePath(), "/"); while (tokenizer.hasMoreTokens()) { bstream.write((byte)'\\'); String nextName = tokenizer.nextToken(); @@ -496,27 +496,30 @@ class WindowsPreferences extends AbstractPreferences{ /* Check if key's path is short enough be opened at once otherwise use a path-splitting procedure */ if (windowsAbsolutePath.length <= MAX_WINDOWS_PATH_LENGTH + 1) { - int[] result = WindowsRegOpenKey1(rootNativeHandle(), - windowsAbsolutePath, mask1); - if (result[ERROR_CODE] == ERROR_ACCESS_DENIED && mask2 != mask1) - result = WindowsRegOpenKey1(rootNativeHandle(), - windowsAbsolutePath, mask2); - - if (result[ERROR_CODE] != ERROR_SUCCESS) { - logger().warning("Could not open windows " - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegOpenKey(...) returned error code " + - result[ERROR_CODE] + "."); + int[] result = WindowsRegOpenKey1(rootNativeHandle(), + windowsAbsolutePath, mask1); + if (result[ERROR_CODE] == ERROR_ACCESS_DENIED && mask2 != mask1) + result = WindowsRegOpenKey1(rootNativeHandle(), + windowsAbsolutePath, mask2); + + if (result[ERROR_CODE] != ERROR_SUCCESS) { + logger().warning("Could not open windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ". Windows RegOpenKey(...) returned error code " + + result[ERROR_CODE] + "."); result[NATIVE_HANDLE] = NULL_NATIVE_HANDLE; if (result[ERROR_CODE] == ERROR_ACCESS_DENIED) { - throw new SecurityException("Could not open windows " - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ": Access denied"); + throw new SecurityException( + "Could not open windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ": Access denied"); } - } - return result[NATIVE_HANDLE]; + } + return result[NATIVE_HANDLE]; } else { return openKey(rootNativeHandle(), windowsAbsolutePath, mask1, mask2); } @@ -539,21 +542,21 @@ class WindowsPreferences extends AbstractPreferences{ int mask1, int mask2) { /* If the path is short enough open at once. Otherwise split the path */ if (windowsRelativePath.length <= MAX_WINDOWS_PATH_LENGTH + 1 ) { - int[] result = WindowsRegOpenKey1(nativeHandle, - windowsRelativePath, mask1); - if (result[ERROR_CODE] == ERROR_ACCESS_DENIED && mask2 != mask1) - result = WindowsRegOpenKey1(nativeHandle, - windowsRelativePath, mask2); - - if (result[ERROR_CODE] != ERROR_SUCCESS) { - logger().warning("Could not open windows " - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(nativeHandle) + - ". Windows RegOpenKey(...) returned error code " + - result[ERROR_CODE] + "."); + int[] result = WindowsRegOpenKey1(nativeHandle, + windowsRelativePath, mask1); + if (result[ERROR_CODE] == ERROR_ACCESS_DENIED && mask2 != mask1) + result = WindowsRegOpenKey1(nativeHandle, + windowsRelativePath, mask2); + + if (result[ERROR_CODE] != ERROR_SUCCESS) { + logger().warning("Could not open windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + Integer.toHexString(nativeHandle) + + ". Windows RegOpenKey(...) returned error code " + + result[ERROR_CODE] + "."); result[NATIVE_HANDLE] = NULL_NATIVE_HANDLE; - } - return result[NATIVE_HANDLE]; + } + return result[NATIVE_HANDLE]; } else { int separatorPosition = -1; // Be greedy - open the longest possible path @@ -595,10 +598,12 @@ class WindowsPreferences extends AbstractPreferences{ private void closeKey(int nativeHandle) { int result = WindowsRegCloseKey(nativeHandle); if (result != ERROR_SUCCESS) { - logger().warning("Could not close windows " - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegCloseKey(...) returned error code " + result + "."); + logger().warning("Could not close windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ". Windows RegCloseKey(...) returned error code " + + result + "."); } } @@ -609,22 +614,25 @@ class WindowsPreferences extends AbstractPreferences{ * @see #getSpi(String) */ protected void putSpi(String javaName, String value) { - int nativeHandle = openKey(KEY_SET_VALUE); - if (nativeHandle == NULL_NATIVE_HANDLE) { - isBackingStoreAvailable = false; - return; - } - int result = WindowsRegSetValueEx1(nativeHandle, - toWindowsName(javaName), toWindowsValueString(value)); - if (result != ERROR_SUCCESS) { - logger().warning("Could not assign value to key " + - byteArrayToString(toWindowsName(javaName))+ " at Windows registry node " - + byteArrayToString(windowsAbsolutePath()) + " at root 0x" - + Integer.toHexString(rootNativeHandle()) + - ". Windows RegSetValueEx(...) returned error code " + result + "."); - isBackingStoreAvailable = false; + int nativeHandle = openKey(KEY_SET_VALUE); + if (nativeHandle == NULL_NATIVE_HANDLE) { + isBackingStoreAvailable = false; + return; } - closeKey(nativeHandle); + int result = WindowsRegSetValueEx1(nativeHandle, + toWindowsName(javaName), toWindowsValueString(value)); + if (result != ERROR_SUCCESS) { + logger().warning("Could not assign value to key " + + byteArrayToString(toWindowsName(javaName)) + + " at Windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ". Windows RegSetValueEx(...) returned error code " + + result + "."); + isBackingStoreAvailable = false; + } + closeKey(nativeHandle); } /** @@ -663,12 +671,12 @@ class WindowsPreferences extends AbstractPreferences{ int result = WindowsRegDeleteValue(nativeHandle, toWindowsName(key)); if (result != ERROR_SUCCESS && result != ERROR_FILE_NOT_FOUND) { - logger().warning("Could not delete windows registry " - + "value " + byteArrayToString(windowsAbsolutePath())+ "\\" + - toWindowsName(key) + " at root 0x" + - Integer.toHexString(rootNativeHandle()) + - ". Windows RegDeleteValue(...) returned error code " + - result + "."); + logger().warning("Could not delete windows registry value " + + byteArrayToString(windowsAbsolutePath()) + "\\" + + toWindowsName(key) + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ". Windows RegDeleteValue(...) returned error code " + + result + "."); isBackingStoreAvailable = false; } closeKey(nativeHandle); @@ -684,17 +692,20 @@ class WindowsPreferences extends AbstractPreferences{ // Find out the number of values int nativeHandle = openKey(KEY_QUERY_VALUE); if (nativeHandle == NULL_NATIVE_HANDLE) { - throw new BackingStoreException("Could not open windows" - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + "."); + throw new BackingStoreException( + "Could not open windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + "."); } int[] result = WindowsRegQueryInfoKey1(nativeHandle); if (result[ERROR_CODE] != ERROR_SUCCESS) { - String info = "Could not query windows" - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegQueryInfoKeyEx(...) returned error code " + - result[ERROR_CODE] + "."; + String info = "Could not query windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ". Windows RegQueryInfoKeyEx(...) returned error code " + + result[ERROR_CODE] + "."; logger().warning(info); throw new BackingStoreException(info); } @@ -703,17 +714,17 @@ class WindowsPreferences extends AbstractPreferences{ if (valuesNumber == 0) { closeKey(nativeHandle); return new String[0]; - } - // Get the values - String[] valueNames = new String[valuesNumber]; - for (int i = 0; i < valuesNumber; i++) { + } + // Get the values + String[] valueNames = new String[valuesNumber]; + for (int i = 0; i < valuesNumber; i++) { byte[] windowsName = WindowsRegEnumValue1(nativeHandle, i, - maxValueNameLength+1); + maxValueNameLength+1); if (windowsName == null) { String info = - "Could not enumerate value #" + i + " of windows node " + - byteArrayToString(windowsAbsolutePath()) + " at root 0x" + - Integer.toHexString(rootNativeHandle()) + "."; + "Could not enumerate value #" + i + " of windows node " + + byteArrayToString(windowsAbsolutePath()) + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + "."; logger().warning(info); throw new BackingStoreException(info); } @@ -731,20 +742,22 @@ class WindowsPreferences extends AbstractPreferences{ */ protected String[] childrenNamesSpi() throws BackingStoreException { // Open key - int nativeHandle = openKey(KEY_ENUMERATE_SUB_KEYS| KEY_QUERY_VALUE); + int nativeHandle = openKey(KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE); if (nativeHandle == NULL_NATIVE_HANDLE) { - throw new BackingStoreException("Could not open windows" - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + "."); + throw new BackingStoreException( + "Could not open windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + "."); } // Get number of children int[] result = WindowsRegQueryInfoKey1(nativeHandle); if (result[ERROR_CODE] != ERROR_SUCCESS) { - String info = "Could not query windows" - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegQueryInfoKeyEx(...) returned error code " + - result[ERROR_CODE] + "."; + String info = "Could not query windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + Integer.toHexString(rootNativeHandle()) + + ". Windows RegQueryInfoKeyEx(...) returned error code " + + result[ERROR_CODE] + "."; logger().warning(info); throw new BackingStoreException(info); } @@ -759,12 +772,12 @@ class WindowsPreferences extends AbstractPreferences{ // Get children for (int i = 0; i < subKeysNumber; i++) { byte[] windowsName = WindowsRegEnumKeyEx1(nativeHandle, i, - maxKeyLength+1); + maxKeyLength+1); if (windowsName == null) { String info = - "Could not enumerate key #" + i + " of windows node " + - byteArrayToString(windowsAbsolutePath()) + " at root 0x" + - Integer.toHexString(rootNativeHandle()) + ". "; + "Could not enumerate key #" + i + " of windows node " + + byteArrayToString(windowsAbsolutePath()) + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + ". "; logger().warning(info); throw new BackingStoreException(info); } @@ -789,20 +802,24 @@ class WindowsPreferences extends AbstractPreferences{ } if (!isBackingStoreAvailable) { throw new BackingStoreException( - "flush(): Backing store not available."); + "flush(): Backing store not available."); } int nativeHandle = openKey(KEY_READ); if (nativeHandle == NULL_NATIVE_HANDLE) { - throw new BackingStoreException("Could not open windows" - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + "."); + throw new BackingStoreException( + "Could not open windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + "."); } int result = WindowsRegFlushKey1(nativeHandle); if (result != ERROR_SUCCESS) { - String info = "Could not flush windows " - + "registry node " + byteArrayToString(windowsAbsolutePath()) - + " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegFlushKey(...) returned error code " + result + "."; + String info = "Could not flush windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + + ". Windows RegFlushKey(...) returned error code " + + result + "."; logger().warning(info); throw new BackingStoreException(info); } @@ -829,7 +846,7 @@ class WindowsPreferences extends AbstractPreferences{ * Logs a warning message, if Windows Registry is unavailable. */ protected AbstractPreferences childSpi(String name) { - return new WindowsPreferences(this, name); + return new WindowsPreferences(this, name); } /** @@ -840,20 +857,22 @@ class WindowsPreferences extends AbstractPreferences{ */ public void removeNodeSpi() throws BackingStoreException { int parentNativeHandle = - ((WindowsPreferences)parent()).openKey(DELETE); + ((WindowsPreferences)parent()).openKey(DELETE); if (parentNativeHandle == NULL_NATIVE_HANDLE) { - throw new BackingStoreException("Could not open parent windows" - + "registry node of " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + "."); + throw new BackingStoreException( + "Could not open parent windows registry node of " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + + Integer.toHexString(rootNativeHandle()) + "."); } int result = WindowsRegDeleteKey(parentNativeHandle, toWindowsName(name())); if (result != ERROR_SUCCESS) { - String info = "Could not delete windows " - + "registry node " + byteArrayToString(windowsAbsolutePath()) + - " at root 0x" + Integer.toHexString(rootNativeHandle()) + - ". Windows RegDeleteKeyEx(...) returned error code " + - result + "."; + String info = "Could not delete windows registry node " + + byteArrayToString(windowsAbsolutePath()) + + " at root 0x" + Integer.toHexString(rootNativeHandle()) + + ". Windows RegDeleteKeyEx(...) returned error code " + + result + "."; logger().warning(info); throw new BackingStoreException(info); } @@ -870,23 +889,25 @@ class WindowsPreferences extends AbstractPreferences{ private static String toJavaName(byte[] windowsNameArray) { String windowsName = byteArrayToString(windowsNameArray); // check if Alt64 - if ((windowsName.length()>1) && - (windowsName.substring(0,2).equals("/!"))) { + if ((windowsName.length() > 1) && + (windowsName.substring(0, 2).equals("/!"))) { return toJavaAlt64Name(windowsName); } - StringBuffer javaName = new StringBuffer(); + StringBuilder javaName = new StringBuilder(); char ch; // Decode from simple encoding - for (int i = 0; i < windowsName.length(); i++){ + for (int i = 0; i < windowsName.length(); i++) { if ((ch = windowsName.charAt(i)) == '/') { char next = ' '; if ((windowsName.length() > i + 1) && - ((next = windowsName.charAt(i+1)) >= 'A') && (next <= 'Z')) { - ch = next; - i++; - } else if ((windowsName.length() > i + 1) && (next == '/')) { - ch = '\\'; - i++; + ((next = windowsName.charAt(i+1)) >= 'A') && + (next <= 'Z')) { + ch = next; + i++; + } else if ((windowsName.length() > i + 1) && + (next == '/')) { + ch = '\\'; + i++; } } else if (ch == '\\') { ch = '/'; @@ -905,8 +926,8 @@ class WindowsPreferences extends AbstractPreferences{ private static String toJavaAlt64Name(String windowsName) { byte[] byteBuffer = - Base64.altBase64ToByteArray(windowsName.substring(2)); - StringBuffer result = new StringBuffer(); + Base64.altBase64ToByteArray(windowsName.substring(2)); + StringBuilder result = new StringBuilder(); for (int i = 0; i < byteBuffer.length; i++) { int firstbyte = (byteBuffer[i++] & 0xff); int secondbyte = (byteBuffer[i] & 0xff); @@ -936,10 +957,10 @@ class WindowsPreferences extends AbstractPreferences{ * Base64 class. */ private static byte[] toWindowsName(String javaName) { - StringBuffer windowsName = new StringBuffer(); + StringBuilder windowsName = new StringBuilder(); for (int i = 0; i < javaName.length(); i++) { - char ch =javaName.charAt(i); - if ((ch < 0x0020)||(ch > 0x007f)) { + char ch = javaName.charAt(i); + if ((ch < 0x0020) || (ch > 0x007f)) { // If a non-trivial character encountered, use altBase64 return toWindowsAlt64Name(javaName); } @@ -948,7 +969,7 @@ class WindowsPreferences extends AbstractPreferences{ } else if (ch == '/') { windowsName.append('\\'); } else if ((ch >= 'A') && (ch <='Z')) { - windowsName.append("/" + ch); + windowsName.append('/').append(ch); } else { windowsName.append(ch); } @@ -967,13 +988,13 @@ class WindowsPreferences extends AbstractPreferences{ // Convert to byte pairs int counter = 0; for (int i = 0; i < javaName.length();i++) { - int ch = javaName.charAt(i); - javaNameArray[counter++] = (byte)(ch >>> 8); - javaNameArray[counter++] = (byte)ch; + int ch = javaName.charAt(i); + javaNameArray[counter++] = (byte)(ch >>> 8); + javaNameArray[counter++] = (byte)ch; } - return stringToByteArray( - "/!" + Base64.byteArrayToAltBase64(javaNameArray)); + return stringToByteArray("/!" + + Base64.byteArrayToAltBase64(javaNameArray)); } /** @@ -985,30 +1006,31 @@ class WindowsPreferences extends AbstractPreferences{ private static String toJavaValueString(byte[] windowsNameArray) { // Use modified native2ascii algorithm String windowsName = byteArrayToString(windowsNameArray); - StringBuffer javaName = new StringBuffer(); + StringBuilder javaName = new StringBuilder(); char ch; for (int i = 0; i < windowsName.length(); i++){ if ((ch = windowsName.charAt(i)) == '/') { char next = ' '; if (windowsName.length() > i + 1 && - (next = windowsName.charAt(i + 1)) == 'u') { - if (windowsName.length() < i + 6){ + (next = windowsName.charAt(i + 1)) == 'u') { + if (windowsName.length() < i + 6) { break; } else { - ch = (char)Integer.parseInt - (windowsName.substring(i + 2, i + 6), 16); + ch = (char)Integer.parseInt( + windowsName.substring(i + 2, i + 6), 16); i += 5; } } else if ((windowsName.length() > i + 1) && - ((windowsName.charAt(i+1)) >= 'A') && (next <= 'Z')) { - ch = next; - i++; - } else if ((windowsName.length() > i + 1) && - (next == '/')) { - ch = '\\'; - i++; + ((windowsName.charAt(i+1)) >= 'A') && + (next <= 'Z')) { + ch = next; + i++; + } else if ((windowsName.length() > i + 1) && + (next == '/')) { + ch = '\\'; + i++; } } else if (ch == '\\') { ch = '/'; @@ -1028,14 +1050,14 @@ class WindowsPreferences extends AbstractPreferences{ * to convert java string to a byte array of ASCII characters. */ private static byte[] toWindowsValueString(String javaName) { - StringBuffer windowsName = new StringBuffer(); + StringBuilder windowsName = new StringBuilder(); for (int i = 0; i < javaName.length(); i++) { - char ch =javaName.charAt(i); - if ((ch < 0x0020)||(ch > 0x007f)){ + char ch = javaName.charAt(i); + if ((ch < 0x0020) || (ch > 0x007f)){ // write \udddd windowsName.append("/u"); String hex = Integer.toHexString(javaName.charAt(i)); - StringBuffer hex4 = new StringBuffer(hex); + StringBuilder hex4 = new StringBuilder(hex); hex4.reverse(); int len = 4 - hex4.length(); for (int j = 0; j < len; j++){ @@ -1049,7 +1071,7 @@ class WindowsPreferences extends AbstractPreferences{ } else if (ch == '/') { windowsName.append('\\'); } else if ((ch >= 'A') && (ch <='Z')) { - windowsName.append("/" + ch); + windowsName.append('/').append(ch); } else { windowsName.append(ch); } @@ -1061,8 +1083,9 @@ class WindowsPreferences extends AbstractPreferences{ * Returns native handle for the top Windows node for this node. */ private int rootNativeHandle() { - return (isUserNode()? USER_ROOT_NATIVE_HANDLE : - SYSTEM_ROOT_NATIVE_HANDLE); + return (isUserNode() + ? USER_ROOT_NATIVE_HANDLE + : SYSTEM_ROOT_NATIVE_HANDLE); } /** @@ -1081,7 +1104,7 @@ class WindowsPreferences extends AbstractPreferences{ * Converts a null-terminated byte array to java string */ private static String byteArrayToString(byte[] array) { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); for (int i = 0; i < array.length - 1; i++) { result.append((char)array[i]); }