changeset 1599:050b48f42fb3

Fix remaining Java files and backport Net.c and RESTARTABLE macro. 2009-01-26 Andrew John Hughes <ahughes@redhat.com> * overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/ch/AsynchronousFileLockImpl.java, * overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxNamedAttributeView.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixDirectoryStream.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixException.java: Fix imports. * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributeViews.java: Fix imports and use of varargs. * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributes.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileModeAttribute.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileStore.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java, * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java: Fix imports. * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixSecureDirectoryStream.java: Fix imports and use of varargs. * overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixUserPrincipals.java: Fix imports. * patches/icedtea-nio2.patch: (FileChannelImpl): Fix imports. (Net.c): Patch to new version with new functions. (nio_util.h): Add RESTARTABLE macro.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Mon, 26 Jan 2009 23:09:32 +0000
parents 721c79ccc804
children 514ec9ce7cae
files ChangeLog overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/ch/AsynchronousFileLockImpl.java overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxNamedAttributeView.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixDirectoryStream.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixException.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributeViews.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributes.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileModeAttribute.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileStore.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixSecureDirectoryStream.java overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixUserPrincipals.java patches/icedtea-nio2.patch
diffstat 22 files changed, 898 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Jan 20 09:44:16 2009 +0000
+++ b/ChangeLog	Mon Jan 26 23:09:32 2009 +0000
@@ -1,4 +1,36 @@
-2009-01-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-26  Andrew John Hughes  <ahughes@redhat.com>
+
+	* overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/ch/AsynchronousFileLockImpl.java,
+	* overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxNamedAttributeView.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixDirectoryStream.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixException.java:
+	Fix imports.
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributeViews.java:
+	Fix imports and use of varargs.
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributes.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileModeAttribute.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileStore.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java,
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java:
+	Fix imports.
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixSecureDirectoryStream.java:
+	Fix imports and use of varargs.
+	* overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixUserPrincipals.java:
+	Fix imports.
+	* patches/icedtea-nio2.patch:
+	(FileChannelImpl): Fix imports.
+	(Net.c): Patch to new version with new functions.
+	(nio_util.h): Add RESTARTABLE macro.
+
+2009-01-19  Andrew John Hughes  <ahughes@redhat.com>
 
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/misc/JavaNetGetIndexAccess.java:
 	(getByIndex(int)): New method.
@@ -75,6 +107,7 @@
 	(FileDispatcher.release0(FileDescriptor, long, long)): Likewise.
 	
 2009-01-19  Deepak Bhole  <dbhole@redhat.com>
+
 	* IcedTeaPlugin.cc: Add "Java" in the plugin description string. 
 	* plugin/icedtea/sun/applet/PluginAppletViewer.java: Change the way the
 	image was searched locally.
@@ -107,7 +140,7 @@
 	* rt/net/sourceforge/jnlp/tools/JarSigner.java: Implement the new
 	CertVerifier verifier interface.
 
-2009-01-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-19  Andrew John Hughes  <ahughes@redhat.com>
 
 	* generated/sun/nio/ch/SocketOptionRegistry.java:
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/java/nio/channels/DatagramChannel.java:
@@ -158,7 +191,7 @@
 	* ports/hotspot/src/cpu/zero/vm/globals_zero.hpp
 	(StackShadowPages): Increase for 64-bit builds.
 
-2009-01-14  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-14  Andrew John Hughes  <ahughes@redhat.com>
 
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/java/nio/channels/FileChannel.java:
 	Extend java.nio.channels.FileChannel to minimise code.
@@ -184,13 +217,13 @@
 	(getVersionedResourceURL): New function. Constructs a URL with a
 	version-id as the query.
 
-2009-01-13  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-13  Andrew John Hughes  <ahughes@redhat.com>
 
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/misc/JavaIODeleteOnExitAccess.java,
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/misc/SharedSecrets.java:
 	Add missing SharedSecrets files.
 
-2009-01-13  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-13  Andrew John Hughes  <ahughes@redhat.com>
 
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/java/net/StandardProtocolFamily.java,
 	* overlays/nio2/openjdk/jdk/src/share/classes/org/classpath/icedtea/java/net/StandardSocketOption.java:
@@ -231,7 +264,7 @@
 	Patch ThreadPoolExecutor to allow access to private variables, add missing files to
 	nio/FILES_java.gmk
 
-2009-01-12  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-12  Andrew John Hughes  <ahughes@redhat.com>
 
 	* overlays/nio2/openjdk/jdk/src/share/classes/com/sun/nio/file/ExtendedCopyOption.java,
 	* overlays/nio2/openjdk/jdk/src/share/classes/com/sun/nio/file/ExtendedOpenOption.java,
@@ -290,7 +323,7 @@
 
 	* contrib/jck/compile-native-code.sh: Build with -m32 or -m64.
 
-2009-01-12  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2009-01-12  Andrew John Hughes  <ahughes@redhat.com>
 
 	Initial import of NIO2 code.
 	* patches/ecj/icedtea-pr261.patch: Moved to general patches.
@@ -750,13 +783,13 @@
 	(stamps/extract.stamp): Use AWK here rather than cut.
 	* hotspot.map: Add md5sum for 14.0b08.
 
-2008-12-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-17  Andrew John Hughes  <ahughes@redhat.com>
 
 	* acinclude.m4:
 	(FIND_RHINO_JAR): Check for js.jar
 	in Gentoo install location too.
 	
-2008-12-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-17  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	No need to check again that SYSTEM_GCJ_DIR exists.
@@ -769,7 +802,7 @@
 	More --with-x-home options to macros in acinclude.m4.
 	Remove redundant erroneous use of GCC_OLD.
 
-2008-12-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-17  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Remove use of LIBGCJ_JAR, replacing with
@@ -783,7 +816,7 @@
 	* javac.in:
 	Use SYSTEM_GCJ_DIR/jre/lib/rt.jar not LIBGCJ_JAR.
 
-2008-12-17  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-17  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Remove the HotSpot directory while extracting
@@ -855,7 +888,7 @@
 	* rt/net/sourceforge/jnlp/runtime/JNLPClassLoader.java: Provide new 
 	cacheable param to JARDesc constructor.
 
-2008-12-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-09  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Support use of HGREV.
@@ -864,14 +897,14 @@
 	* configure.ac:
 	Call AC_CHECK_WITH_HG_REVISION.
 
-2008-12-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-09  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Properly support --with-openjdk-src-dir.
 	* acinclude.m4:
 	Correct the define for OPENJDK_SRC_DIR.
 
-2008-12-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-09  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Support downloading from the Mercurial repository.
@@ -880,7 +913,7 @@
 	* configure.ac:
 	Check for --enable-hg.
 
-2008-12-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-09  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Make XRender patch wildcard work where
@@ -888,7 +921,7 @@
 	* configure.ac:
 	Capitalise 'XRender' in configure option.
 
-2008-12-09  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-09  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Don't use find to locate the hotspot directory,
@@ -957,7 +990,7 @@
 	lost chunks from icedtea-sparc.patch, fix build failure with gcc-4.3.
 	* Makefile.am (ICEDTEA_PATCHES): Apply new patch.
 
-2008-12-04  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-04  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Prefix the call to uname -m with
@@ -965,7 +998,7 @@
 	* acinclude.m4:
 	Apply linux32 on s390 as well.
 
-2008-12-04  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-04  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
 	Prefix make invocations with
@@ -1081,7 +1114,7 @@
 	* pulseaudio/src/java/org/classpath/icedtea/pulseaudio/StreamSampleSpecification.java:
 	Make class package-private.
 
-2008-12-03  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-03  Andrew John Hughes  <ahughes@redhat.com>
 
 	Create hierarchical patch space.
 	* patches/icedtea-4486841.patch,
@@ -1263,7 +1296,7 @@
 	patches/icedtea-6755943.patch,
 	patches/icedtea-6766136.patch: New files.
 	
-2008-12-02  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-02  Andrew John Hughes  <ahughes@redhat.com>
 
 	* patches/icedtea-bytecodeInterpreter.patch,
 	* patches/icedtea-hotspot7-build-fixes.patch:
@@ -1282,7 +1315,7 @@
 	* ports/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp:
 	Updated using IcedTea7 versions for 14.0b08.
 
-2008-12-01  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+2008-12-01  Andrew John Hughes  <ahughes@redhat.com>
 
 	* patches/icedtea-hotspot-params-cast-size_t.patch,
 	* patches/icedtea-hotspot-use-idx_t.patch,
--- a/overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/ch/AsynchronousFileLockImpl.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/ch/AsynchronousFileLockImpl.java	Mon Jan 26 23:09:32 2009 +0000
@@ -27,6 +27,7 @@
 package sun.nio.ch;
 
 import java.io.IOException;
+import java.nio.channels.Channel;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.FileChannel;
 
--- a/overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/share/classes/sun/nio/fs/PollingWatchService.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,8 +25,6 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
-import java.nio.file.attribute.*;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedExceptionAction;
@@ -34,6 +32,19 @@
 import java.io.IOException;
 import java.util.*;
 
+import org.classpath.icedtea.java.nio.file.ClosedWatchServiceException;
+import org.classpath.icedtea.java.nio.file.DirectoryStream;
+import org.classpath.icedtea.java.nio.file.FileRef;
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.NotDirectoryException;
+import org.classpath.icedtea.java.nio.file.Path;
+import org.classpath.icedtea.java.nio.file.StandardWatchEventKind;
+import org.classpath.icedtea.java.nio.file.WatchEvent;
+import org.classpath.icedtea.java.nio.file.WatchKey;
+
+import org.classpath.icedtea.java.nio.file.attribute.Attributes;
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributes;
+
 /**
  * Simple WatchService implementation that uses background thread to poll
  * registered directories for changes.  This implementation is for use
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,11 +25,12 @@
 
 package sun.nio.fs;
 
-import java.nio.file.FileRef;
 import java.io.IOException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
+import org.classpath.icedtea.java.nio.file.FileRef;
+
 /**
  * File type detector that uses the GNOME I/O library or the deprecated
  * GNOME VFS to guess the MIME type of a file.
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxDosFileAttributeView.java	Mon Jan 26 23:09:32 2009 +0000
@@ -30,6 +30,8 @@
 import java.io.IOException;
 import sun.misc.Unsafe;
 
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributes;
+import org.classpath.icedtea.java.nio.file.attribute.DosFileAttributes;
 import org.classpath.icedtea.java.nio.file.attribute.DosFileAttributeView;
 
 import static sun.nio.fs.UnixNativeDispatcher.*;
@@ -105,7 +107,7 @@
     }
 
 
-    public Map<String,?> readAttributes(String first, String[] rest)
+    public Map<String,?> readAttributes(String first, String... rest)
         throws IOException
     {
         AttributesBuilder builder = AttributesBuilder.create(first, rest);
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxFileSystem.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,14 +25,20 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
-import java.nio.file.attribute.*;
 import java.io.IOException;
 import java.util.*;
 import java.security.AccessController;
 import sun.security.action.GetPropertyAction;
 import static sun.nio.fs.LinuxNativeDispatcher.*;
 
+import org.classpath.icedtea.java.nio.file.FileStore;
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.WatchService;
+
+import org.classpath.icedtea.java.nio.file.attribute.DosFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.NamedAttributeView;
+
 /**
  * Linux implementation of FileSystem
  */
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxNamedAttributeView.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxNamedAttributeView.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,12 +25,16 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
 import java.nio.ByteBuffer;
 import java.io.IOException;
 import java.util.*;
 import sun.misc.Unsafe;
 
+import org.classpath.icedtea.java.nio.channels.AsynchronousFileChannel;
+import org.classpath.icedtea.java.nio.channels.FileChannel;
+
+import org.classpath.icedtea.java.nio.file.FileSystemException;
+
 import static sun.nio.fs.UnixConstants.*;
 import static sun.nio.fs.LinuxNativeDispatcher.*;
 
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,13 +25,18 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.*;
 import java.io.IOException;
 import sun.misc.Unsafe;
 
+import org.classpath.icedtea.java.nio.file.NotDirectoryException;
+import org.classpath.icedtea.java.nio.file.Path;
+import org.classpath.icedtea.java.nio.file.StandardWatchEventKind;
+import org.classpath.icedtea.java.nio.file.WatchEvent;
+import org.classpath.icedtea.java.nio.file.WatchKey;
+
 import static sun.nio.fs.UnixNativeDispatcher.*;
 import static sun.nio.fs.UnixConstants.*;
 
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,8 +25,6 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
-import java.nio.channels.*;
 import java.io.FileDescriptor;
 import java.util.Set;
 
@@ -36,6 +34,13 @@
 import sun.misc.SharedSecrets;
 import sun.misc.JavaIOFileDescriptorAccess;
 
+import org.classpath.icedtea.java.nio.channels.AsynchronousFileChannel;
+import org.classpath.icedtea.java.nio.channels.FileChannel;
+
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.OpenOption;
+import org.classpath.icedtea.java.nio.file.StandardOpenOption;
+
 import static sun.nio.fs.UnixNativeDispatcher.*;
 import static sun.nio.fs.UnixConstants.*;
 
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,13 +25,20 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
 import java.io.IOException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.concurrent.ExecutionException;
 import com.sun.nio.file.ExtendedCopyOption;
 
+import org.classpath.icedtea.java.nio.file.AtomicMoveNotSupportedException;
+import org.classpath.icedtea.java.nio.file.CopyOption;
+import org.classpath.icedtea.java.nio.file.DirectoryNotEmptyException;
+import org.classpath.icedtea.java.nio.file.FileAlreadyExistsException;
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.LinkPermission;
+import org.classpath.icedtea.java.nio.file.StandardCopyOption;
+
 import static sun.nio.fs.UnixNativeDispatcher.*;
 import static sun.nio.fs.UnixConstants.*;
 
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixDirectoryStream.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixDirectoryStream.java	Mon Jan 26 23:09:32 2009 +0000
@@ -32,6 +32,7 @@
 import java.io.IOException;
 import static sun.nio.fs.UnixNativeDispatcher.*;
 
+import org.classpath.icedtea.java.nio.file.ClosedDirectoryStreamException;
 import org.classpath.icedtea.java.nio.file.DirectoryStream;
 import org.classpath.icedtea.java.nio.file.Path;
 
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixException.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixException.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,9 +25,13 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
 import java.io.IOException;
 
+import org.classpath.icedtea.java.nio.file.AccessDeniedException;
+import org.classpath.icedtea.java.nio.file.FileAlreadyExistsException;
+import org.classpath.icedtea.java.nio.file.FileSystemException;
+import org.classpath.icedtea.java.nio.file.NoSuchFileException;
+
 /**
  * Internal exception thrown by native methods when error detected.
  */
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributeViews.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributeViews.java	Mon Jan 26 23:09:32 2009 +0000
@@ -29,7 +29,16 @@
 import java.util.concurrent.TimeUnit;
 import java.io.IOException;
 
+import org.classpath.icedtea.java.nio.file.ProviderMismatchException;
+
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributes;
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileOwnerAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.GroupPrincipal;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributes;
 import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFilePermission;
+import org.classpath.icedtea.java.nio.file.attribute.UserPrincipal;
 
 import static sun.nio.fs.UnixNativeDispatcher.*;
 
@@ -199,7 +208,7 @@
         }
 
 
-        public Map<String,?> readAttributes(String first, String[] rest)
+        public Map<String,?> readAttributes(String first, String... rest)
             throws IOException
         {
             AttributesBuilder builder = AttributesBuilder.create(first, rest);
@@ -349,7 +358,7 @@
         }
 
 
-        public Map<String,?> readAttributes(String first, String[] rest)
+        public Map<String,?> readAttributes(String first, String... rest)
             throws IOException
         {
             AttributesBuilder builder = AttributesBuilder.create(first, rest);
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributes.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileAttributes.java	Mon Jan 26 23:09:32 2009 +0000
@@ -31,6 +31,9 @@
 
 import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributes;
 import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributes;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFilePermission;
+import org.classpath.icedtea.java.nio.file.attribute.GroupPrincipal;
+import org.classpath.icedtea.java.nio.file.attribute.UserPrincipal;
 
 /**
  * Unix implementation of PosixFileAttributes.
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileModeAttribute.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileModeAttribute.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,9 +25,11 @@
 
 package sun.nio.fs;
 
-import java.nio.file.attribute.*;
 import java.util.*;
 
+import org.classpath.icedtea.java.nio.file.attribute.FileAttribute;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFilePermission;
+
 class UnixFileModeAttribute {
     static final int ALL_PERMISSIONS =
         UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | UnixConstants.S_IXUSR |
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileStore.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileStore.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,14 +25,25 @@
 
 package sun.nio.fs;
 
-import java.nio.channels.*;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
 import java.util.*;
 import java.io.IOException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
+import org.classpath.icedtea.java.nio.file.FileRef;
 import org.classpath.icedtea.java.nio.file.FileStore;
 import org.classpath.icedtea.java.nio.file.FileSystem;
+import org.classpath.icedtea.java.nio.file.Paths;
+
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileOwnerAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileStoreAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileStoreSpaceAttributes;
+import org.classpath.icedtea.java.nio.file.attribute.FileStoreSpaceAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributeView;
 
 /**
  * Base implementation of FileStore for Unix/like implementations.
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java	Mon Jan 26 23:09:32 2009 +0000
@@ -34,7 +34,18 @@
 
 import org.classpath.icedtea.java.nio.file.FileStore;
 import org.classpath.icedtea.java.nio.file.FileSystem;
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.Path;
+import org.classpath.icedtea.java.nio.file.PathMatcher;
+
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileOwnerAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.GroupPrincipal;
 import org.classpath.icedtea.java.nio.file.attribute.UserPrincipal;
+import org.classpath.icedtea.java.nio.file.attribute.UserPrincipalLookupService;
+
 import org.classpath.icedtea.java.nio.file.spi.FileSystemProvider;
 
 /**
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,13 +25,24 @@
 
 package sun.nio.fs;
 
-import java.nio.channels.*;
-import java.nio.channels.spi.AsynchronousChannelProvider.ThreadPoolType;
 import java.net.URI;
+import java.nio.channels.FileChannel;
 import java.util.concurrent.ExecutorService;
 import java.io.IOException;
 import java.util.*;
 
+import org.classpath.icedtea.java.nio.channels.AsynchronousFileChannel;
+
+import org.classpath.icedtea.java.nio.channels.spi.AsynchronousChannelProvider.ThreadPoolType;
+
+import org.classpath.icedtea.java.nio.file.FileSystem;
+import org.classpath.icedtea.java.nio.file.FileSystemAlreadyExistsException;
+import org.classpath.icedtea.java.nio.file.OpenOption;
+import org.classpath.icedtea.java.nio.file.Path;
+import org.classpath.icedtea.java.nio.file.ProviderMismatchException;
+
+import org.classpath.icedtea.java.nio.file.attribute.FileAttribute;
+
 import org.classpath.icedtea.java.nio.file.spi.FileSystemProvider;
 
 import sun.nio.ch.ThreadPool;
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,17 +25,41 @@
 
 package sun.nio.fs;
 
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.nio.channels.*;
 import java.security.AccessController;
 import java.io.*;
 import java.net.URI;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
 import java.util.*;
 import sun.security.util.SecurityConstants;
 
+import org.classpath.icedtea.java.io.FilePermission;
+
+import org.classpath.icedtea.java.nio.channels.SeekableByteChannel;
+
+import org.classpath.icedtea.java.nio.file.AccessMode;
+import org.classpath.icedtea.java.nio.file.CopyOption;
+import org.classpath.icedtea.java.nio.file.DirectoryNotEmptyException;
+import org.classpath.icedtea.java.nio.file.DirectoryStream;
 import org.classpath.icedtea.java.nio.file.FileRef;
-import org.classpath.icedtea.java.nio.file.attribute.FilePermission;
+import org.classpath.icedtea.java.nio.file.FileStore;
+import org.classpath.icedtea.java.nio.file.FileSystemException;
+import org.classpath.icedtea.java.nio.file.InvalidPathException;
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.LinkPermission;
+import org.classpath.icedtea.java.nio.file.NotDirectoryException;
+import org.classpath.icedtea.java.nio.file.NotLinkException;
+import org.classpath.icedtea.java.nio.file.OpenOption;
+import org.classpath.icedtea.java.nio.file.Path;
+import org.classpath.icedtea.java.nio.file.ProviderMismatchException;
+import org.classpath.icedtea.java.nio.file.StandardOpenOption;
+import org.classpath.icedtea.java.nio.file.WatchEvent;
+import org.classpath.icedtea.java.nio.file.WatchKey;
+import org.classpath.icedtea.java.nio.file.WatchService;
+
+import org.classpath.icedtea.java.nio.file.attribute.FileAttribute;
+import org.classpath.icedtea.java.nio.file.attribute.FileAttributeView;
+
 import org.classpath.icedtea.java.nio.file.spi.AbstractPath;
 
 import static sun.nio.fs.UnixNativeDispatcher.*;
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixSecureDirectoryStream.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixSecureDirectoryStream.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,16 +25,32 @@
 
 package sun.nio.fs;
 
-import java.nio.channels.SeekableByteChannel;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.io.IOException;
 
+import org.classpath.icedtea.java.nio.channels.SeekableByteChannel;
+
+import org.classpath.icedtea.java.nio.file.AtomicMoveNotSupportedException;
+import org.classpath.icedtea.java.nio.file.ClosedDirectoryStreamException;
+import org.classpath.icedtea.java.nio.file.DirectoryNotEmptyException;
+import org.classpath.icedtea.java.nio.file.DirectoryStream;
+import org.classpath.icedtea.java.nio.file.LinkOption;
+import org.classpath.icedtea.java.nio.file.NotDirectoryException;
 import org.classpath.icedtea.java.nio.file.OpenOption;
 import org.classpath.icedtea.java.nio.file.Path;
+import org.classpath.icedtea.java.nio.file.ProviderMismatchException;
 import org.classpath.icedtea.java.nio.file.SecureDirectoryStream;
+
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributes;
+import org.classpath.icedtea.java.nio.file.attribute.BasicFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileAttribute;
+import org.classpath.icedtea.java.nio.file.attribute.FileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.FileOwnerAttributeView;
 import org.classpath.icedtea.java.nio.file.attribute.GroupPrincipal;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributes;
 import org.classpath.icedtea.java.nio.file.attribute.PosixFileAttributeView;
+import org.classpath.icedtea.java.nio.file.attribute.PosixFilePermission;
 import org.classpath.icedtea.java.nio.file.attribute.UserPrincipal;
 
 import static sun.nio.fs.UnixNativeDispatcher.*;
@@ -529,7 +545,7 @@
         }
 
 
-        public Map<String,?> readAttributes(String first, String[] rest)
+        public Map<String,?> readAttributes(String first, String... rest)
             throws IOException
         {
             AttributesBuilder builder = AttributesBuilder.create(first, rest);
--- a/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixUserPrincipals.java	Tue Jan 20 09:44:16 2009 +0000
+++ b/overlays/nio2/openjdk/jdk/src/solaris/classes/sun/nio/fs/UnixUserPrincipals.java	Mon Jan 26 23:09:32 2009 +0000
@@ -25,11 +25,11 @@
 
 package sun.nio.fs;
 
-import java.nio.file.attribute.*;
 import java.io.IOException;
 
+import org.classpath.icedtea.java.nio.file.attribute.GroupPrincipal;
 import org.classpath.icedtea.java.nio.file.attribute.UserPrincipal;
-import org.classpath.icedtea.java.nio.file.attribute.GroupPrincipal;
+import org.classpath.icedtea.java.nio.file.attribute.UserPrincipalNotFoundException;
 
 import static sun.nio.fs.UnixNativeDispatcher.*;
 
--- a/patches/icedtea-nio2.patch	Tue Jan 20 09:44:16 2009 +0000
+++ b/patches/icedtea-nio2.patch	Mon Jan 26 23:09:32 2009 +0000
@@ -1370,6 +1370,35 @@
 +    }
 +
  }
+diff -Nru openjdk.orig/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java openjdk/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java
+--- openjdk.orig/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java	2009-01-20 13:37:15.000000000 +0000
++++ openjdk/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java	2009-01-20 13:45:52.000000000 +0000
+@@ -32,8 +32,15 @@
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.nio.MappedByteBuffer;
+-import java.nio.channels.*;
+-import java.nio.channels.spi.*;
++import java.nio.channels.ClosedChannelException;
++import java.nio.channels.ClosedByInterruptException;
++import java.nio.channels.FileLock;
++import java.nio.channels.FileLockInterruptionException;
++import java.nio.channels.NonReadableChannelException;
++import java.nio.channels.NonWritableChannelException;
++import java.nio.channels.OverlappingFileLockException;
++import java.nio.channels.ReadableByteChannel;
++import java.nio.channels.WritableByteChannel;
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Iterator;
+@@ -46,6 +53,7 @@
+ import sun.misc.Cleaner;
+ import sun.security.action.GetPropertyAction;
+ 
++import org.classpath.icedtea.java.nio.channels.FileChannel;
+ 
+ public class FileChannelImpl
+     extends FileChannel
 diff -Nru openjdk.orig/jdk/src/share/classes/sun/nio/ch/Net.java openjdk/jdk/src/share/classes/sun/nio/ch/Net.java
 --- openjdk.orig/jdk/src/share/classes/sun/nio/ch/Net.java	2009-01-15 17:37:33.000000000 +0000
 +++ openjdk/jdk/src/share/classes/sun/nio/ch/Net.java	2009-01-19 23:21:37.000000000 +0000
@@ -1867,6 +1896,661 @@
  
  class InheritedChannel {
  
+diff -Nru openjdk.orig/jdk/src/solaris/native/sun/nio/ch/Net.c openjdk/jdk/src/solaris/native/sun/nio/ch/Net.c
+--- openjdk.orig/jdk/src/solaris/native/sun/nio/ch/Net.c	2009-01-26 20:51:08.000000000 +0000
++++ openjdk/jdk/src/solaris/native/sun/nio/ch/Net.c	2009-01-26 20:55:17.000000000 +0000
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2001-2007 Sun Microsystems, Inc.  All Rights Reserved.
++ * Copyright 2001-2008 Sun Microsystems, Inc.  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
+@@ -37,61 +37,171 @@
+ #include "net_util.h"
+ #include "net_util_md.h"
+ #include "nio_util.h"
+-#include "java_net_SocketOptions.h"
+ #include "nio.h"
+ 
+-#ifdef __linux__
+-#include <sys/utsname.h>
++/**
++ * Definitions for source-specific multicast to allow for building
++ * with older header files.
++ */
++
++#ifdef __solaris__
+ 
+-#define IPV6_MULTICAST_IF 17
+-#ifndef SO_BSDCOMPAT
+-#define SO_BSDCOMPAT  14
++#ifndef IP_BLOCK_SOURCE
++
++#define IP_BLOCK_SOURCE                 0x15
++#define IP_UNBLOCK_SOURCE               0x16
++#define IP_ADD_SOURCE_MEMBERSHIP        0x17
++#define IP_DROP_SOURCE_MEMBERSHIP       0x18
++
++#define MCAST_BLOCK_SOURCE              0x2b
++#define MCAST_UNBLOCK_SOURCE            0x2c
++#define MCAST_JOIN_SOURCE_GROUP         0x2d
++#define MCAST_LEAVE_SOURCE_GROUP        0x2e
++
++#endif  /* IP_BLOCK_SOURCE */
++
++struct my_ip_mreq_source {
++        struct in_addr  imr_multiaddr;
++        struct in_addr  imr_sourceaddr;
++        struct in_addr  imr_interface;
++};
++
++/*
++ * Use #pragma pack() construct to force 32-bit alignment on amd64.
++ */
++#if defined(amd64)
++#pragma pack(4)
+ #endif
++
++struct my_group_source_req {
++        uint32_t                gsr_interface;  /* interface index */
++        struct sockaddr_storage gsr_group;      /* group address */
++        struct sockaddr_storage gsr_source;     /* source address */
++};
++
++#if defined(amd64)
++#pragma pack()
+ #endif
+ 
++#endif  /* __solaris__ */
++
++
++#ifdef __linux__
++
++#ifndef IP_BLOCK_SOURCE
++
++#define IP_BLOCK_SOURCE                 38
++#define IP_UNBLOCK_SOURCE               37
++#define IP_ADD_SOURCE_MEMBERSHIP        39
++#define IP_DROP_SOURCE_MEMBERSHIP       40
++
++#define MCAST_BLOCK_SOURCE              43
++#define MCAST_UNBLOCK_SOURCE            44
++#define MCAST_JOIN_SOURCE_GROUP         42
++#define MCAST_LEAVE_SOURCE_GROUP        45
++
++#endif  /* IP_BLOCK_SOURCE */
++
++struct my_ip_mreq_source {
++        struct in_addr  imr_multiaddr;
++        struct in_addr  imr_interface;
++        struct in_addr  imr_sourceaddr;
++};
++
++struct my_group_source_req {
++        uint32_t                gsr_interface;  /* interface index */
++        struct sockaddr_storage gsr_group;      /* group address */
++        struct sockaddr_storage gsr_source;     /* source address */
++};
++
++#endif   /* __linux__ */
++
++
++#define COPY_INET6_ADDRESS(env, source, target) \
++    (*env)->GetByteArrayRegion(env, source, 0, 16, target)
++
++/*
++ * Copy IPv6 group, interface index, and IPv6 source address
++ * into group_source_req structure.
++ */
++static void initGroupSourceReq(JNIEnv* env, jbyteArray group, jint index,
++                               jbyteArray source, struct my_group_source_req* req)
++{
++    struct sockaddr_in6* sin6;
++
++    req->gsr_interface = (uint32_t)index;
++
++    sin6 = (struct sockaddr_in6*)&(req->gsr_group);
++    sin6->sin6_family = AF_INET6;
++    COPY_INET6_ADDRESS(env, group, (jbyte*)&(sin6->sin6_addr));
++
++    sin6 = (struct sockaddr_in6*)&(req->gsr_source);
++    sin6->sin6_family = AF_INET6;
++    COPY_INET6_ADDRESS(env, source, (jbyte*)&(sin6->sin6_addr));
++}
++
++
+ JNIEXPORT void JNICALL
+ Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz)
+ {
+     /* Here because Windows native code does need to init IDs */
+ }
+ 
++JNIEXPORT jboolean JNICALL
++Java_sun_nio_ch_Net_isIPv6Available0(JNIEnv* env, jclass cl)
++{
++    return (ipv6_available()) ? JNI_TRUE : JNI_FALSE;
++}
++
+ JNIEXPORT int JNICALL
+-Java_sun_nio_ch_Net_socket0(JNIEnv *env, jclass cl, jboolean stream,
+-                            jboolean reuse)
++Java_sun_nio_ch_Net_socket0(JNIEnv *env, jclass cl, jboolean preferIPv6,
++                            jboolean stream, jboolean reuse)
+ {
+     int fd;
++    int type = (stream ? SOCK_STREAM : SOCK_DGRAM);
++    int domain = (ipv6_available() && preferIPv6) ? AF_INET6 : AF_INET;
+ 
+-#ifdef AF_INET6
+-    if (ipv6_available())
+-        fd = socket(AF_INET6, (stream ? SOCK_STREAM : SOCK_DGRAM), 0);
+-    else
+-#endif /* AF_INET6 */
+-        fd = socket(AF_INET, (stream ? SOCK_STREAM : SOCK_DGRAM), 0);
+-
++    fd = socket(domain, type, 0);
+     if (fd < 0) {
+         return handleSocketError(env, errno);
+     }
+     if (reuse) {
+         int arg = 1;
+-        if (NET_SetSockOpt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg,
+-                           sizeof(arg)) < 0) {
++        if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg,
++                       sizeof(arg)) < 0) {
++            JNU_ThrowByNameWithLastError(env,
++                                         JNU_JAVANETPKG "SocketException",
++                                         "sun.nio.ch.Net.setIntOption");
++            close(fd);
++            return -1;
++        }
++    }
++#ifdef __linux__
++    /* By default, Linux uses the route default */
++    if (domain == AF_INET6 && type == SOCK_DGRAM) {
++        int arg = 1;
++        if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &arg,
++                       sizeof(arg)) < 0) {
+             JNU_ThrowByNameWithLastError(env,
+                                          JNU_JAVANETPKG "SocketException",
+                                          "sun.nio.ch.Net.setIntOption");
++            close(fd);
++            return -1;
+         }
+     }
++#endif
+     return fd;
+ }
+ 
+ JNIEXPORT void JNICALL
+-Java_sun_nio_ch_Net_bind(JNIEnv *env, jclass clazz, /* ## Needs rest of PSI gunk */
+-                         jobject fdo, jobject ia, int port)
++Java_sun_nio_ch_Net_bind0(JNIEnv *env, jclass clazz, jboolean preferIPv6,
++                          jobject fdo, jobject iao, int port)
+ {
+     SOCKADDR sa;
+     int sa_len = SOCKADDR_LEN;
+     int rv = 0;
+ 
+-    if (NET_InetAddressToSockaddr(env, ia, port, (struct sockaddr *)&sa, &sa_len, JNI_TRUE) != 0) {
++    if (NET_InetAddressToSockaddr(env, iao, port, (struct sockaddr *)&sa, &sa_len, preferIPv6) != 0) {
+       return;
+     }
+ 
+@@ -101,27 +211,27 @@
+     }
+ }
+ 
++JNIEXPORT void JNICALL
++Java_sun_nio_ch_Net_listen(JNIEnv *env, jclass cl, jobject fdo, jint backlog)
++{
++    if (listen(fdval(env, fdo), backlog) < 0)
++        handleSocketError(env, errno);
++}
++
+ JNIEXPORT jint JNICALL
+-Java_sun_nio_ch_Net_connect(JNIEnv *env, jclass clazz,
+-                                jobject fdo, jobject iao, jint port,
+-                                jint trafficClass)
++Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6,
++                             jobject fdo, jobject iao, jint port)
+ {
+     SOCKADDR sa;
+     int sa_len = SOCKADDR_LEN;
+     int rv;
+ 
+-    if (NET_InetAddressToSockaddr(env, iao, port, (struct sockaddr *) &sa, &sa_len, JNI_TRUE) != 0) {
++    if (NET_InetAddressToSockaddr(env, iao, port, (struct sockaddr *) &sa,
++                                  &sa_len, preferIPv6) != 0)
++    {
+       return IOS_THROWN;
+     }
+ 
+-#ifdef AF_INET6
+-#if 0
+-    if (trafficClass != 0 && ipv6_available()) { /* ## FIX */
+-        NET_SetTrafficClass((struct sockaddr *)&sa, trafficClass);
+-    }
+-#endif
+-#endif
+-
+     rv = connect(fdval(env, fdo), (struct sockaddr *)&sa, sa_len);
+     if (rv != 0) {
+         if (errno == EINPROGRESS) {
+@@ -138,7 +248,7 @@
+ Java_sun_nio_ch_Net_localPort(JNIEnv *env, jclass clazz, jobject fdo)
+ {
+     SOCKADDR sa;
+-    int sa_len = SOCKADDR_LEN;
++    socklen_t sa_len = SOCKADDR_LEN;
+     if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
+         handleSocketError(env, errno);
+         return -1;
+@@ -150,7 +260,7 @@
+ Java_sun_nio_ch_Net_localInetAddress(JNIEnv *env, jclass clazz, jobject fdo)
+ {
+     SOCKADDR sa;
+-    int sa_len = SOCKADDR_LEN;
++    socklen_t sa_len = SOCKADDR_LEN;
+     int port;
+     if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
+         handleSocketError(env, errno);
+@@ -159,119 +269,79 @@
+     return NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port);
+ }
+ 
+-
+-#ifdef NEEDED
+-
+-/* ## This is gross.  We should generate platform-specific constant
+- * ## definitions into a .java file and use those directly.
+- */
+-
+-static int
+-mapOption(JNIEnv *env, int opt, int *klevel, int *kopt)
+-{
+-
+-    switch (opt) {
+-
+-    case java_net_SocketOptions_IP_TOS:
+-        *klevel = IPPROTO_IP;
+-        *kopt = IP_TOS;
+-        break;
+-
+-    case java_net_SocketOptions_SO_BROADCAST:
+-    case java_net_SocketOptions_SO_KEEPALIVE:
+-    case java_net_SocketOptions_SO_LINGER:
+-    case java_net_SocketOptions_SO_OOBINLINE:
+-    case java_net_SocketOptions_SO_RCVBUF:
+-    case java_net_SocketOptions_SO_REUSEADDR:
+-    case java_net_SocketOptions_SO_SNDBUF:
+-        *klevel = SOL_SOCKET;
+-        break;
+-
+-    case java_net_SocketOptions_TCP_NODELAY:
+-        *klevel = IPPROTO_IP;
+-        *kopt = TCP_NODELAY;
+-        return 0;
+-
+-    default:
+-        JNU_ThrowByName(env, "java/lang/IllegalArgumentException", NULL);
+-        return -1;
+-    }
+-
+-    switch (opt) {
+-
+-    case java_net_SocketOptions_SO_BROADCAST:   *kopt = SO_BROADCAST;  break;
+-    case java_net_SocketOptions_SO_KEEPALIVE:   *kopt = SO_KEEPALIVE;  break;
+-    case java_net_SocketOptions_SO_LINGER:      *kopt = SO_LINGER;  break;
+-    case java_net_SocketOptions_SO_OOBINLINE:   *kopt = SO_OOBINLINE;  break;
+-    case java_net_SocketOptions_SO_RCVBUF:      *kopt = SO_RCVBUF;  break;
+-    case java_net_SocketOptions_SO_REUSEADDR:   *kopt = SO_REUSEADDR;  break;
+-    case java_net_SocketOptions_SO_SNDBUF:      *kopt = SO_SNDBUF;  break;
+-
+-    default:
+-        return -1;
+-    }
+-
+-    return 0;
+-}
+-#endif
+-
+-
+ JNIEXPORT jint JNICALL
+-Java_sun_nio_ch_Net_getIntOption0(JNIEnv *env, jclass clazz,
+-                                  jobject fdo, jint opt)
++Java_sun_nio_ch_Net_getIntOption0(JNIEnv *env, jclass clazz, jobject fdo,
++                                  jboolean mayNeedConversion, jint level, jint opt)
+ {
+-    int klevel, kopt;
+     int result;
+     struct linger linger;
++    u_char carg;
+     void *arg;
+-    int arglen;
++    int arglen, n;
+ 
+-    if (NET_MapSocketOption(opt, &klevel, &kopt) < 0) {
+-        JNU_ThrowByNameWithLastError(env,
+-                                     JNU_JAVANETPKG "SocketException",
+-                                     "Unsupported socket option");
+-        return -1;
++    /* Option value is an int except for a few specific cases */
++
++    arg = (void *)&result;
++    arglen = sizeof(result);
++
++    if (level == IPPROTO_IP &&
++        (opt == IP_MULTICAST_TTL || opt == IP_MULTICAST_LOOP)) {
++        arg = (void*)&carg;
++        arglen = sizeof(carg);
+     }
+ 
+-    if (opt == java_net_SocketOptions_SO_LINGER) {
++    if (level == SOL_SOCKET && opt == SO_LINGER) {
+         arg = (void *)&linger;
+         arglen = sizeof(linger);
+-    } else {
+-        arg = (void *)&result;
+-        arglen = sizeof(result);
+     }
+ 
+-    if (NET_GetSockOpt(fdval(env, fdo), klevel, kopt, arg, &arglen) < 0) {
++    if (mayNeedConversion) {
++        n = NET_GetSockOpt(fdval(env, fdo), level, opt, arg, &arglen);
++    } else {
++        n = getsockopt(fdval(env, fdo), level, opt, arg, &arglen);
++    }
++    if (n < 0) {
+         JNU_ThrowByNameWithLastError(env,
+                                      JNU_JAVANETPKG "SocketException",
+                                      "sun.nio.ch.Net.getIntOption");
+         return -1;
+     }
+ 
+-    if (opt == java_net_SocketOptions_SO_LINGER)
+-        return linger.l_onoff ? linger.l_linger : -1;
+-    else
+-        return result;
++    if (level == IPPROTO_IP &&
++        (opt == IP_MULTICAST_TTL || opt == IP_MULTICAST_LOOP))
++    {
++        return (jint)carg;
++    }
++
++    if (level == SOL_SOCKET && opt == SO_LINGER)
++        return linger.l_onoff ? (jint)linger.l_linger : (jint)-1;
++
++    return (jint)result;
+ }
+ 
+ JNIEXPORT void JNICALL
+-Java_sun_nio_ch_Net_setIntOption0(JNIEnv *env, jclass clazz,
+-                                  jobject fdo, jint opt, jint arg)
++Java_sun_nio_ch_Net_setIntOption0(JNIEnv *env, jclass clazz, jobject fdo,
++                                  jboolean mayNeedConversion, jint level, jint opt, jint arg)
+ {
+-    int klevel, kopt;
+     int result;
+     struct linger linger;
++    u_char carg;
+     void *parg;
+-    int arglen;
++    int arglen, n;
+ 
+-    if (NET_MapSocketOption(opt, &klevel, &kopt) < 0) {
+-        JNU_ThrowByNameWithLastError(env,
+-                                     JNU_JAVANETPKG "SocketException",
+-                                     "Unsupported socket option");
+-        return;
++    /* Option value is an int except for a few specific cases */
++
++    parg = (void*)&arg;
++    arglen = sizeof(arg);
++
++    if (level == IPPROTO_IP &&
++        (opt == IP_MULTICAST_TTL || opt == IP_MULTICAST_LOOP)) {
++        parg = (void*)&carg;
++        arglen = sizeof(carg);
++        carg = (u_char)arg;
+     }
+ 
+-    if (opt == java_net_SocketOptions_SO_LINGER) {
++    if (level == SOL_SOCKET && opt == SO_LINGER) {
+         parg = (void *)&linger;
+         arglen = sizeof(linger);
+         if (arg >= 0) {
+@@ -281,19 +351,199 @@
+             linger.l_onoff = 0;
+             linger.l_linger = 0;
+         }
+-    } else {
+-        parg = (void *)&arg;
+-        arglen = sizeof(arg);
+     }
+ 
+-    if (NET_SetSockOpt(fdval(env, fdo), klevel, kopt, parg, arglen) < 0) {
++    if (mayNeedConversion) {
++        n = NET_SetSockOpt(fdval(env, fdo), level, opt, parg, arglen);
++    } else {
++        n = setsockopt(fdval(env, fdo), level, opt, parg, arglen);
++    }
++    if (n < 0) {
+         JNU_ThrowByNameWithLastError(env,
+                                      JNU_JAVANETPKG "SocketException",
+                                      "sun.nio.ch.Net.setIntOption");
+     }
+ }
+ 
++JNIEXPORT jint JNICALL
++Java_sun_nio_ch_Net_joinOrDrop4(JNIEnv *env, jobject this, jboolean join, jobject fdo,
++                                jint group, jint interf, jint source)
++{
++    struct ip_mreq mreq;
++    struct my_ip_mreq_source mreq_source;
++    int opt, n, optlen;
++    void* optval;
++
++    if (source == 0) {
++        mreq.imr_multiaddr.s_addr = htonl(group);
++        mreq.imr_interface.s_addr = htonl(interf);
++        opt = (join) ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP;
++        optval = (void*)&mreq;
++        optlen = sizeof(mreq);
++    } else {
++        mreq_source.imr_multiaddr.s_addr = htonl(group);
++        mreq_source.imr_sourceaddr.s_addr = htonl(source);
++        mreq_source.imr_interface.s_addr = htonl(interf);
++        opt = (join) ? IP_ADD_SOURCE_MEMBERSHIP : IP_DROP_SOURCE_MEMBERSHIP;
++        optval = (void*)&mreq_source;
++        optlen = sizeof(mreq_source);
++    }
++
++    n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt, optval, optlen);
++    if (n < 0) {
++        if (join && (errno == ENOPROTOOPT))
++            return IOS_UNAVAILABLE;
++        handleSocketError(env, errno);
++    }
++    return 0;
++}
++
++JNIEXPORT jint JNICALL
++Java_sun_nio_ch_Net_blockOrUnblock4(JNIEnv *env, jobject this, jboolean block, jobject fdo,
++                                    jint group, jint interf, jint source)
++{
++    struct my_ip_mreq_source mreq_source;
++    int n;
++    int opt = (block) ? IP_BLOCK_SOURCE : IP_UNBLOCK_SOURCE;
++
++    mreq_source.imr_multiaddr.s_addr = htonl(group);
++    mreq_source.imr_sourceaddr.s_addr = htonl(source);
++    mreq_source.imr_interface.s_addr = htonl(interf);
++
++    n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt,
++                   (void*)&mreq_source, sizeof(mreq_source));
++    if (n < 0) {
++        if (block && (errno == ENOPROTOOPT))
++            return IOS_UNAVAILABLE;
++        handleSocketError(env, errno);
++    }
++    return 0;
++}
++
++JNIEXPORT jint JNICALL
++Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobject fdo,
++                                jbyteArray group, jint index, jbyteArray source)
++{
++    struct ipv6_mreq mreq6;
++    struct my_group_source_req req;
++    int opt, n, optlen;
++    void* optval;
++
++    if (source == NULL) {
++        COPY_INET6_ADDRESS(env, group, (jbyte*)&(mreq6.ipv6mr_multiaddr));
++        mreq6.ipv6mr_interface = (int)index;
++        opt = (join) ? IPV6_ADD_MEMBERSHIP : IPV6_DROP_MEMBERSHIP;
++        optval = (void*)&mreq6;
++        optlen = sizeof(mreq6);
++    } else {
++#ifdef __linux__
++        /* Include-mode filtering broken on Linux at least to 2.6.24 */
++        return IOS_UNAVAILABLE;
++#else
++        initGroupSourceReq(env, group, index, source, &req);
++        opt = (join) ? MCAST_JOIN_SOURCE_GROUP : MCAST_LEAVE_SOURCE_GROUP;
++        optval = (void*)&req;
++        optlen = sizeof(req);
++#endif
++    }
++
++    n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt, optval, optlen);
++    if (n < 0) {
++        if (join && (errno == ENOPROTOOPT))
++            return IOS_UNAVAILABLE;
++        handleSocketError(env, errno);
++    }
++    return 0;
++}
++
++JNIEXPORT jint JNICALL
++Java_sun_nio_ch_Net_blockOrUnblock6(JNIEnv *env, jobject this, jboolean block, jobject fdo,
++                                    jbyteArray group, jint index, jbyteArray source)
++{
++    struct my_group_source_req req;
++    int n;
++    int opt = (block) ? MCAST_BLOCK_SOURCE : MCAST_UNBLOCK_SOURCE;
++
++    initGroupSourceReq(env, group, index, source, &req);
++
++    n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt,
++        (void*)&req, sizeof(req));
++    if (n < 0) {
++        if (block && (errno == ENOPROTOOPT))
++            return IOS_UNAVAILABLE;
++        handleSocketError(env, errno);
++    }
++    return 0;
++}
+ 
++JNIEXPORT void JNICALL
++Java_sun_nio_ch_Net_setInterface4(JNIEnv* env, jobject this, jobject fdo, jint interf)
++{
++    struct in_addr in;
++    int arglen = sizeof(struct in_addr);
++    int n;
++
++    in.s_addr = htonl(interf);
++
++    n = setsockopt(fdval(env, fdo), IPPROTO_IP, IP_MULTICAST_IF,
++                   (void*)&(in.s_addr), arglen);
++    if (n < 0) {
++        handleSocketError(env, errno);
++    }
++}
++
++JNIEXPORT jint JNICALL
++Java_sun_nio_ch_Net_getInterface4(JNIEnv* env, jobject this, jobject fdo)
++{
++    struct in_addr in;
++    int arglen = sizeof(struct in_addr);
++    int n;
++
++    n = getsockopt(fdval(env, fdo), IPPROTO_IP, IP_MULTICAST_IF, (void*)&in, &arglen);
++    if (n < 0) {
++        handleSocketError(env, errno);
++        return -1;
++    }
++    return ntohl(in.s_addr);
++}
++
++JNIEXPORT void JNICALL
++Java_sun_nio_ch_Net_setInterface6(JNIEnv* env, jobject this, jobject fdo, jint index)
++{
++    int value = (jint)index;
++    int arglen = sizeof(value);
++    int n;
++
++    n = setsockopt(fdval(env, fdo), IPPROTO_IPV6, IPV6_MULTICAST_IF,
++                   (void*)&(index), arglen);
++    if (n < 0) {
++        handleSocketError(env, errno);
++    }
++}
++
++JNIEXPORT jint JNICALL
++Java_sun_nio_ch_Net_getInterface6(JNIEnv* env, jobject this, jobject fdo)
++{
++    int index;
++    int arglen = sizeof(index);
++    int n;
++
++    n = getsockopt(fdval(env, fdo), IPPROTO_IPV6, IPV6_MULTICAST_IF, (void*)&index, &arglen);
++    if (n < 0) {
++        handleSocketError(env, errno);
++        return -1;
++    }
++    return (jint)index;
++}
++
++JNIEXPORT void JNICALL
++Java_sun_nio_ch_Net_shutdown(JNIEnv *env, jclass cl, jobject fdo, jint jhow)
++{
++    int how = (jhow == sun_nio_ch_Net_SHUT_RD) ? SHUT_RD :
++        (jhow == sun_nio_ch_Net_SHUT_WR) ? SHUT_WR : SHUT_RDWR;
++    if (shutdown(fdval(env, fdo), how) < 0)
++        handleSocketError(env, errno);
++}
+ 
+ /* Declared in nio_util.h */
+ 
+diff -Nru openjdk.orig/jdk/src/solaris/native/sun/nio/ch/nio_util.h openjdk/jdk/src/solaris/native/sun/nio/ch/nio_util.h
+--- openjdk.orig/jdk/src/solaris/native/sun/nio/ch/nio_util.h	2009-01-26 22:44:30.000000000 +0000
++++ openjdk/jdk/src/solaris/native/sun/nio/ch/nio_util.h	2009-01-26 22:44:22.000000000 +0000
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2001-2002 Sun Microsystems, Inc.  All Rights Reserved.
++ * Copyright 2001-2008 Sun Microsystems, Inc.  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
+@@ -27,8 +27,15 @@
+ #include "jni_util.h"
+ #include "jvm.h"
+ #include "jlong.h"
++#include <errno.h>
+ #include <sys/types.h>
+ 
++#define RESTARTABLE(_cmd, _result) do { \
++  do { \
++    _result = _cmd; \
++  } while((_result == -1) && (errno == EINTR)); \
++} while(0)
++
+ 
+ /* NIO utility procedures */
+ 
 diff -Nru openjdk.orig/jdk/src/windows/classes/sun/nio/ch/FileDispatcher.java openjdk/jdk/src/windows/classes/sun/nio/ch/FileDispatcher.java
 --- openjdk.orig/jdk/src/windows/classes/sun/nio/ch/FileDispatcher.java	2009-01-19 22:35:32.000000000 +0000
 +++ openjdk/jdk/src/windows/classes/sun/nio/ch/FileDispatcher.java	2009-01-19 22:37:37.000000000 +0000