Merge
authorcoffeys
Fri, 22 Nov 2013 09:56:56 +0000
changeset 21844 3ef6ca8596a2
parent 21843 766fef71e8bb (current diff)
parent 21841 5e5571b9a6a2 (diff)
child 21845 35695321f5a5
Merge
--- a/jdk/src/share/classes/java/lang/String.java	Thu Nov 21 20:48:24 2013 +0000
+++ b/jdk/src/share/classes/java/lang/String.java	Fri Nov 22 09:56:56 2013 +0000
@@ -123,7 +123,7 @@
      * Class String is special cased within the Serialization Stream Protocol.
      *
      * A String instance is written into an ObjectOutputStream according to
-     * <a href="{@docroot}../platform/serialization/spec/output.html">
+     * <a href="{@docRoot}/../platform/serialization/spec/output.html">
      * Object Serialization Specification, Section 6.2, "Stream Elements"</a>
      */
     private static final ObjectStreamField[] serialPersistentFields =
@@ -1893,7 +1893,7 @@
     }
 
     /**
-     * Returns a new string that is a substring of this string. The
+     * Returns a string that is a substring of this string. The
      * substring begins with the character at the specified index and
      * extends to the end of this string. <p>
      * Examples:
@@ -1921,7 +1921,7 @@
     }
 
     /**
-     * Returns a new string that is a substring of this string. The
+     * Returns a string that is a substring of this string. The
      * substring begins at the specified {@code beginIndex} and
      * extends to the character at index {@code endIndex - 1}.
      * Thus the length of the substring is {@code endIndex-beginIndex}.
@@ -1970,6 +1970,7 @@
      * <blockquote><pre>
      * str.substring(begin,&nbsp;end)</pre></blockquote>
      *
+     * @apiNote
      * This method is defined so that the {@code String} class can implement
      * the {@link CharSequence} interface.
      *
@@ -1993,8 +1994,8 @@
      * Concatenates the specified string to the end of this string.
      * <p>
      * If the length of the argument string is {@code 0}, then this
-     * {@code String} object is returned. Otherwise, a new
-     * {@code String} object is created, representing a character
+     * {@code String} object is returned. Otherwise, a
+     * {@code String} object is returned that represents a character
      * sequence that is the concatenation of the character sequence
      * represented by this {@code String} object and the character
      * sequence represented by the argument string.<p>
@@ -2021,13 +2022,13 @@
     }
 
     /**
-     * Returns a new string resulting from replacing all occurrences of
+     * Returns a string resulting from replacing all occurrences of
      * {@code oldChar} in this string with {@code newChar}.
      * <p>
      * If the character {@code oldChar} does not occur in the
      * character sequence represented by this {@code String} object,
      * then a reference to this {@code String} object is returned.
-     * Otherwise, a new {@code String} object is created that
+     * Otherwise, a {@code String} object is returned that
      * represents a character sequence identical to the character sequence
      * represented by this {@code String} object, except that every
      * occurrence of {@code oldChar} is replaced by an occurrence
@@ -2818,8 +2819,8 @@
     }
 
     /**
-     * Returns a copy of the string, with leading and trailing whitespace
-     * omitted.
+     * Returns a string whose value is this string, with any leading and trailing
+     * whitespace removed.
      * <p>
      * If this {@code String} object represents an empty character
      * sequence, or the first and last characters of character sequence
@@ -2828,15 +2829,15 @@
      * reference to this {@code String} object is returned.
      * <p>
      * Otherwise, if there is no character with a code greater than
-     * {@code '\u005Cu0020'} in the string, then a new
-     * {@code String} object representing an empty string is created
-     * and returned.
+     * {@code '\u005Cu0020'} in the string, then a
+     * {@code String} object representing an empty string is
+     * returned.
      * <p>
      * Otherwise, let <i>k</i> be the index of the first character in the
      * string whose code is greater than {@code '\u005Cu0020'}, and let
      * <i>m</i> be the index of the last character in the string whose code
-     * is greater than {@code '\u005Cu0020'}. A new {@code String}
-     * object is created, representing the substring of this string that
+     * is greater than {@code '\u005Cu0020'}. A {@code String}
+     * object is returned, representing the substring of this string that
      * begins with the character at index <i>k</i> and ends with the
      * character at index <i>m</i>-that is, the result of
      * {@code this.substring(k, m + 1)}.
@@ -2844,7 +2845,7 @@
      * This method may be used to trim whitespace (as defined above) from
      * the beginning and end of a string.
      *
-     * @return  A copy of this string with leading and trailing white
+     * @return  A string whose value is this string, with any leading and trailing white
      *          space removed, or this string if it has no leading or
      *          trailing white space.
      */
@@ -2981,12 +2982,12 @@
     /**
      * Returns the string representation of the {@code char} array
      * argument. The contents of the character array are copied; subsequent
-     * modification of the character array does not affect the newly
-     * created string.
+     * modification of the character array does not affect the returned
+     * string.
      *
-     * @param   data   a {@code char} array.
-     * @return  a newly allocated string representing the same sequence of
-     *          characters contained in the character array argument.
+     * @param   data     the character array.
+     * @return  a {@code String} that contains the characters of the
+     *          character array.
      */
     public static String valueOf(char data[]) {
         return new String(data);
@@ -3000,14 +3001,13 @@
      * character of the subarray. The {@code count} argument
      * specifies the length of the subarray. The contents of the subarray
      * are copied; subsequent modification of the character array does not
-     * affect the newly created string.
+     * affect the returned string.
      *
      * @param   data     the character array.
-     * @param   offset   the initial offset into the value of the
-     *                  {@code String}.
-     * @param   count    the length of the value of the {@code String}.
-     * @return  a string representing the sequence of characters contained
-     *          in the subarray of the character array argument.
+     * @param   offset   initial offset of the subarray.
+     * @param   count    length of the subarray.
+     * @return  a {@code String} that contains the characters of the
+     *          specified subarray of the character array.
      * @exception IndexOutOfBoundsException if {@code offset} is
      *          negative, or {@code count} is negative, or
      *          {@code offset+count} is larger than
@@ -3018,23 +3018,24 @@
     }
 
     /**
-     * Returns a String that represents the character sequence in the
-     * array specified.
+     * Equivalent to {@link #valueOf(char[], int, int)}.
      *
      * @param   data     the character array.
      * @param   offset   initial offset of the subarray.
      * @param   count    length of the subarray.
      * @return  a {@code String} that contains the characters of the
      *          specified subarray of the character array.
+     * @exception IndexOutOfBoundsException if {@code offset} is
+     *          negative, or {@code count} is negative, or
+     *          {@code offset+count} is larger than
+     *          {@code data.length}.
      */
     public static String copyValueOf(char data[], int offset, int count) {
-        // All public String constructors now copy the data.
         return new String(data, offset, count);
     }
 
     /**
-     * Returns a String that represents the character sequence in the
-     * array specified.
+     * Equivalent to {@link #valueOf(char[])}.
      *
      * @param   data   the character array.
      * @return  a {@code String} that contains the characters of the
--- a/jdk/test/java/nio/channels/FileChannel/Size.java	Thu Nov 21 20:48:24 2013 +0000
+++ b/jdk/test/java/nio/channels/FileChannel/Size.java	Fri Nov 22 09:56:56 2013 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, 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
@@ -39,67 +39,57 @@
 
 public class Size {
 
-    private static Random generator = new Random();
-
-    private static File blah;
-
     public static void main(String[] args) throws Exception {
-        test1();
-        test2();
+        testSmallFile();
+        testLargeFile();
     }
 
-    private static void test1() throws Exception {
-        blah = File.createTempFile("blah", null);
-        blah.deleteOnExit();
+    private static void testSmallFile() throws Exception {
+        File smallFile = new File("smallFileTest");
+        Random generator = new Random();
         for(int i=0; i<100; i++) {
             long testSize = generator.nextInt(1000);
-            initTestFile(blah, testSize);
-            FileInputStream fis = new FileInputStream(blah);
-            FileChannel c = fis.getChannel();
-            if (c.size() != testSize)
-                throw new RuntimeException("Size failed");
-            c.close();
-            fis.close();
+            initTestFile(smallFile, testSize);
+            try (FileChannel c = new FileInputStream(smallFile).getChannel()) {
+                if (c.size() != testSize) {
+                    throw new RuntimeException("Size failed in testSmallFile. "
+                                             + "Expect size " + testSize
+                                             + ", actual size " + c.size());
+                }
+            }
         }
-        blah.delete();
+        smallFile.deleteOnExit();
     }
 
     // Test for bug 4563125
-    private static void test2() throws Exception {
-        // Windows and Linux can't handle the really large file sizes for a truncate
-        // or a positional write required by the test for 4563125
-        String osName = System.getProperty("os.name");
-        if (osName.startsWith("SunOS") || osName.contains("OS X")) {
-            blah = File.createTempFile("blah", null);
-            long testSize = ((long)Integer.MAX_VALUE) * 2;
-            initTestFile(blah, 10);
-            RandomAccessFile raf = new RandomAccessFile(blah, "rw");
-            FileChannel fc = raf.getChannel();
+    private static void testLargeFile() throws Exception {
+        File largeFile = new File("largeFileTest");
+        long testSize = ((long)Integer.MAX_VALUE) * 2;
+        initTestFile(largeFile, 10);
+        try (FileChannel fc = new RandomAccessFile(largeFile, "rw").getChannel())
+        {
             fc.size();
             fc.map(FileChannel.MapMode.READ_WRITE, testSize, 10);
-            if (fc.size() != testSize + 10)
-                throw new RuntimeException("Size failed " + fc.size());
-            fc.close();
-            raf.close();
-            blah.delete();
+            if (fc.size() != testSize + 10) {
+                throw new RuntimeException("Size failed in testLargeFile. "
+                                         + "Expect size " + (testSize + 10)
+                                         + ", actual size " + fc.size());
+            }
         }
+        largeFile.deleteOnExit();
     }
 
     /**
-     * Creates file blah of specified size in bytes.
+     * Create a file with the specified size in bytes.
      *
      */
-    private static void initTestFile(File blah, long size) throws Exception {
-        if (blah.exists())
-            blah.delete();
-        FileOutputStream fos = new FileOutputStream(blah);
-        BufferedWriter awriter
-            = new BufferedWriter(new OutputStreamWriter(fos, "8859_1"));
-
-        for(int i=0; i<size; i++) {
-            awriter.write("e");
+    private static void initTestFile(File f, long size) throws Exception {
+        try (BufferedWriter awriter = new BufferedWriter(
+                new OutputStreamWriter(new FileOutputStream(f), "8859_1")))
+        {
+            for(int i=0; i<size; i++) {
+                awriter.write("e");
+            }
         }
-        awriter.flush();
-        awriter.close();
     }
 }
--- a/jdk/test/java/nio/file/Files/Misc.java	Thu Nov 21 20:48:24 2013 +0000
+++ b/jdk/test/java/nio/file/Files/Misc.java	Fri Nov 22 09:56:56 2013 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2013, 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
@@ -313,8 +313,14 @@
                 acl.add(0, entry);
                 view.setAcl(acl);
                 try {
-                    assertTrue(!isWritable(file));
-                    assertTrue(!isExecutable(file));
+                    if (isRoot()) {
+                        // root has all permissions
+                        assertTrue(isWritable(file));
+                        assertTrue(isExecutable(file));
+                    } else {
+                        assertTrue(!isWritable(file));
+                        assertTrue(!isExecutable(file));
+                    }
                 } finally {
                     // Restore ACL
                     acl.remove(0);
@@ -353,4 +359,12 @@
         if (!okay)
             throw new RuntimeException("Assertion Failed");
     }
+
+    private static boolean isRoot() {
+        if (System.getProperty("os.name").startsWith("Windows"))
+            return false;
+
+        Path passwd = Paths.get("/etc/passwd");
+        return Files.isWritable(passwd);
+    }
 }