From: Michael Koch Date: Sun, 12 Oct 2003 13:39:07 +0000 (+0000) Subject: 2003-10-12 Michael Koch X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=81bc077a39faa66769629155bc7d3c03cfe1d194;p=gcc.git 2003-10-12 Michael Koch * gnu/java/nio/PipeImpl.java (SourceChannelImpl): New inner class. (SinkChannelImpl): New inner class. (sink): New member variable. (source): New member variable. (PipeImpl): Add SelectorProvider argument, implemented. (nativeInit): New method. (sink): Return sink channel. (source): Return source channel. * gnu/java/nio/SelectorProviderImpl.java (openPipe): Give provider as argument to PipeImpl constructor. * java/nio/channels/spi/SelectorProvider.java (pr): Removed. (systemDefaultProvider): New member variable. (provider): Made it synchronized, use property java.nio.channels.spi.SelectorProvider. * gnu/java/nio/natPipeImpl.cc: New file. * Makefile.am (nat_source_files): Added gnu/java/nio/natPipeImpl.cc. * Makefile.in: Regenerated. From-SVN: r72397 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index b2e16920691..5c5f1f67073 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,25 @@ +2003-10-12 Michael Koch + + * gnu/java/nio/PipeImpl.java + (SourceChannelImpl): New inner class. + (SinkChannelImpl): New inner class. + (sink): New member variable. + (source): New member variable. + (PipeImpl): Add SelectorProvider argument, implemented. + (nativeInit): New method. + (sink): Return sink channel. + (source): Return source channel. + * gnu/java/nio/SelectorProviderImpl.java + (openPipe): Give provider as argument to PipeImpl constructor. + * java/nio/channels/spi/SelectorProvider.java + (pr): Removed. + (systemDefaultProvider): New member variable. + (provider): Made it synchronized, use property + java.nio.channels.spi.SelectorProvider. + * gnu/java/nio/natPipeImpl.cc: New file. + * Makefile.am (nat_source_files): Added gnu/java/nio/natPipeImpl.cc. + * Makefile.in: Regenerated. + 2003-10-12 Michael Koch * javax/swing/table/DefaultTableModel.java, diff --git a/libjava/Makefile.am b/libjava/Makefile.am index 47c4b1ad788..bc4ea9a7130 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -2659,6 +2659,7 @@ gnu/java/net/natPlainDatagramSocketImpl.cc \ gnu/java/net/natPlainSocketImpl.cc \ gnu/java/net/protocol/core/natCoreInputStream.cc \ gnu/java/nio/natFileLockImpl.cc \ +gnu/java/nio/natPipeImpl.cc \ gnu/java/nio/natSelectorImpl.cc \ gnu/java/nio/natNIOServerSocket.cc \ java/io/natFile.cc \ diff --git a/libjava/Makefile.in b/libjava/Makefile.in index 08a68befe1c..7a80131862d 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -2377,6 +2377,7 @@ gnu/java/net/natPlainDatagramSocketImpl.cc \ gnu/java/net/natPlainSocketImpl.cc \ gnu/java/net/protocol/core/natCoreInputStream.cc \ gnu/java/nio/natFileLockImpl.cc \ +gnu/java/nio/natPipeImpl.cc \ gnu/java/nio/natSelectorImpl.cc \ gnu/java/nio/natNIOServerSocket.cc \ java/io/natFile.cc \ @@ -2555,14 +2556,14 @@ gnu/java/awt/natEmbeddedWindow.lo \ gnu/java/net/natPlainDatagramSocketImpl.lo \ gnu/java/net/natPlainSocketImpl.lo \ gnu/java/net/protocol/core/natCoreInputStream.lo \ -gnu/java/nio/natFileLockImpl.lo gnu/java/nio/natSelectorImpl.lo \ -gnu/java/nio/natNIOServerSocket.lo java/io/natFile.lo \ -java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \ -java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \ -java/lang/natClass.lo java/lang/natClassLoader.lo \ -java/lang/natConcreteProcess.lo java/lang/natDouble.lo \ -java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \ -java/lang/natRuntime.lo java/lang/natString.lo \ +gnu/java/nio/natFileLockImpl.lo gnu/java/nio/natPipeImpl.lo \ +gnu/java/nio/natSelectorImpl.lo gnu/java/nio/natNIOServerSocket.lo \ +java/io/natFile.lo java/io/natFileDescriptor.lo \ +java/io/natObjectInputStream.lo java/io/natVMObjectStreamClass.lo \ +java/lang/natCharacter.lo java/lang/natClass.lo \ +java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \ +java/lang/natDouble.lo java/lang/natFloat.lo java/lang/natMath.lo \ +java/lang/natObject.lo java/lang/natRuntime.lo java/lang/natString.lo \ java/lang/natStringBuffer.lo java/lang/natSystem.lo \ java/lang/natThread.lo java/lang/natVMSecurityManager.lo \ java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \ @@ -3055,7 +3056,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ .deps/gnu/java/nio/charset/UTF_16LE.P \ .deps/gnu/java/nio/charset/UTF_8.P .deps/gnu/java/nio/natFileLockImpl.P \ .deps/gnu/java/nio/natNIOServerSocket.P \ -.deps/gnu/java/nio/natSelectorImpl.P \ +.deps/gnu/java/nio/natPipeImpl.P .deps/gnu/java/nio/natSelectorImpl.P \ .deps/gnu/java/rmi/RMIMarshalledObjectInputStream.P \ .deps/gnu/java/rmi/RMIMarshalledObjectOutputStream.P \ .deps/gnu/java/rmi/dgc/DGCImpl.P .deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \ diff --git a/libjava/gnu/java/nio/PipeImpl.java b/libjava/gnu/java/nio/PipeImpl.java index 77341e7f4a0..da608d21c19 100644 --- a/libjava/gnu/java/nio/PipeImpl.java +++ b/libjava/gnu/java/nio/PipeImpl.java @@ -1,5 +1,5 @@ /* PipeImpl.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,21 +37,127 @@ exception statement from your version. */ package gnu.java.nio; +import java.io.IOException; +import java.nio.ByteBuffer; import java.nio.channels.Pipe; +import java.nio.channels.spi.SelectorProvider; class PipeImpl extends Pipe { - public PipeImpl() + public final class SourceChannelImpl extends Pipe.SourceChannel { + private int native_fd; + + public SourceChannelImpl (SelectorProvider selectorProvider, + int native_fd) + { + super (selectorProvider); + this.native_fd = native_fd; + } + + protected final void implCloseSelectableChannel() + throws IOException + { + throw new Error ("Not implemented"); + } + + protected void implConfigureBlocking (boolean blocking) + throws IOException + { + throw new Error ("Not implemented"); + } + + public final int read (ByteBuffer src) + throws IOException + { + throw new Error ("Not implemented"); + } + + public final long read (ByteBuffer[] srcs) + throws IOException + { + return read (srcs, 0, srcs.length); + } + + public final long read (ByteBuffer[] srcs, int offset, int len) + throws IOException + { + throw new Error ("Not implemented"); + } + + public final int getNativeFD() + { + return native_fd; + } } + + public final class SinkChannelImpl extends Pipe.SinkChannel + { + private int native_fd; + + public SinkChannelImpl (SelectorProvider selectorProvider, + int native_fd) + { + super (selectorProvider); + this.native_fd = native_fd; + } + + protected final void implCloseSelectableChannel() + throws IOException + { + throw new Error ("Not implemented"); + } + + protected final void implConfigureBlocking (boolean blocking) + throws IOException + { + throw new Error ("Not implemented"); + } + + public final int write (ByteBuffer dst) + throws IOException + { + throw new Error ("Not implemented"); + } + + public final long write (ByteBuffer[] dsts) + throws IOException + { + return write (dsts, 0, dsts.length); + } + + public final long write (ByteBuffer[] dsts, int offset, int len) + throws IOException + { + throw new Error ("Not implemented"); + } + + public final int getNativeFD() + { + return native_fd; + } + } + + private SinkChannelImpl sink; + private SourceChannelImpl source; + + public PipeImpl (SelectorProvider provider) + throws IOException + { + super(); + nativeInit (provider); + } + + private native void nativeInit (SelectorProvider provider) + throws IOException; public Pipe.SinkChannel sink() { - return null; + return sink; } public Pipe.SourceChannel source() { - return null; + return source; } } diff --git a/libjava/gnu/java/nio/SelectorProviderImpl.java b/libjava/gnu/java/nio/SelectorProviderImpl.java index d58e10a010e..41966ef14a1 100644 --- a/libjava/gnu/java/nio/SelectorProviderImpl.java +++ b/libjava/gnu/java/nio/SelectorProviderImpl.java @@ -1,5 +1,5 @@ /* SelectorProviderImpl.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -60,7 +60,7 @@ public class SelectorProviderImpl extends SelectorProvider public Pipe openPipe () throws IOException { - return new PipeImpl (); + return new PipeImpl (this); } public AbstractSelector openSelector () diff --git a/libjava/gnu/java/nio/natPipeImpl.cc b/libjava/gnu/java/nio/natPipeImpl.cc new file mode 100644 index 00000000000..522c24cc807 --- /dev/null +++ b/libjava/gnu/java/nio/natPipeImpl.cc @@ -0,0 +1,38 @@ +// natPipeImpl.cc + +/* Copyright (C) 2003 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include +#include + +#include +#include +#include + +#include +//#include +//#include +#include +#include + +void +gnu::java::nio::PipeImpl::nativeInit (::java::nio::channels::spi::SelectorProvider* /*provider*/) +{ + int filedes [2]; + + if (::pipe (filedes) < 0) + throw new ::java::io::IOException (JvNewStringUTF (strerror (errno))); + + /* FIXME + source = new gnu::java::nio::PipeImpl$SourceChannelImpl + (this, provider, filedes [0]); + sink = new gnu::java::nio::PipeImpl$SinkChannelImpl + (this, provider, filedes [1]); + */ +} diff --git a/libjava/java/nio/channels/spi/SelectorProvider.java b/libjava/java/nio/channels/spi/SelectorProvider.java index 1d4ccfa5339..1de3e4f83cc 100644 --- a/libjava/java/nio/channels/spi/SelectorProvider.java +++ b/libjava/java/nio/channels/spi/SelectorProvider.java @@ -1,5 +1,5 @@ /* SelectorProvider.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -50,7 +50,7 @@ import java.nio.channels.SocketChannel; */ public abstract class SelectorProvider { - static SelectorProvider pr; + private static SelectorProvider systemDefaultProvider; /** * Initializes the selector provider. @@ -95,13 +95,32 @@ public abstract class SelectorProvider * Returns the system-wide default selector provider for this invocation * of the Java virtual machine. */ - public static SelectorProvider provider () + public static synchronized SelectorProvider provider () { - if (pr == null) + if (systemDefaultProvider == null) { - pr = new SelectorProviderImpl (); + String propertyValue = + System.getProperty ("java.nio.channels.spi.SelectorProvider"); + + if (propertyValue == null + || propertyValue.equals ("")) + systemDefaultProvider = new SelectorProviderImpl(); + else + { + try + { + systemDefaultProvider = (SelectorProvider) Class.forName + (propertyValue).newInstance(); + } + catch (Exception e) + { + System.err.println ("Could not instantiate class: " + + propertyValue); + systemDefaultProvider = new SelectorProviderImpl(); + } + } } - return pr; + return systemDefaultProvider; } }