+2003-05-14 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/nio/FileLockImpl.java
+ (released): New member variable.
+ (FileLockImpl): Initialize released.
+ (releaseImpl): New native method.
+ (release): Implemented.
+ * gnu/java/nio/SelectorImpl.java: Reformatted.
+ * gnu/java/nio/SelectionKeyImpl.java: Reformatted.
+ * gnu/java/nio/ServerSocketChannelImpl.java: Reformatted.
+ (accept): Throws IOException.
+ * gnu/java/nio/SocketChannelImpl.java: Reformatted.
+ (implConfigureBlocking): Throws IOException.
+ (connect): Likewise.
+ (read): Likewise.
+ (write): Likewise.
+ * gnu/java/nio/natFileLockImpl.cc: New file.
+ * java/nio/channels/FileLock.java: Reformatted.
+ * Makefile.am:
+ (ordinary_java_source_files): Added gnu/java/nio/FileLockImpl.java.
+ (nat_source_files): Added gnu/java/nio/natFileLockImpl.cc.
+ * Makefile.in: Regenerated.
+
2003-05-13 Michael Koch <konqueror@gmx.de>
* gnu/java/nio/CharViewBufferImpl.java
gnu/java/nio/DoubleBufferImpl.java \
gnu/java/nio/DoubleViewBufferImpl.java \
gnu/java/nio/FileChannelImpl.java \
+gnu/java/nio/FileLockImpl.java \
gnu/java/nio/FloatBufferImpl.java \
gnu/java/nio/FloatViewBufferImpl.java \
gnu/java/nio/IntBufferImpl.java \
gnu/gcj/runtime/natVMClassLoader.cc \
gnu/java/nio/natDirectByteBufferImpl.cc \
gnu/java/nio/natFileChannelImpl.cc \
+gnu/java/nio/natFileLockImpl.cc \
gnu/java/nio/natMappedByteFileBuffer.cc \
gnu/java/nio/natSelectorImpl.cc \
gnu/java/nio/natSocketChannelImpl.cc \
gnu/java/nio/DoubleBufferImpl.java \
gnu/java/nio/DoubleViewBufferImpl.java \
gnu/java/nio/FileChannelImpl.java \
+gnu/java/nio/FileLockImpl.java \
gnu/java/nio/FloatBufferImpl.java \
gnu/java/nio/FloatViewBufferImpl.java \
gnu/java/nio/IntBufferImpl.java \
gnu/gcj/runtime/natVMClassLoader.cc \
gnu/java/nio/natDirectByteBufferImpl.cc \
gnu/java/nio/natFileChannelImpl.cc \
+gnu/java/nio/natFileLockImpl.cc \
gnu/java/nio/natMappedByteFileBuffer.cc \
gnu/java/nio/natSelectorImpl.cc \
gnu/java/nio/natSocketChannelImpl.cc \
gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \
gnu/gcj/runtime/natVMClassLoader.lo \
gnu/java/nio/natDirectByteBufferImpl.lo \
-gnu/java/nio/natFileChannelImpl.lo \
+gnu/java/nio/natFileChannelImpl.lo gnu/java/nio/natFileLockImpl.lo \
gnu/java/nio/natMappedByteFileBuffer.lo gnu/java/nio/natSelectorImpl.lo \
gnu/java/nio/natSocketChannelImpl.lo java/io/natFile.lo \
java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \
.deps/gnu/java/nio/DirectByteBufferImpl.P \
.deps/gnu/java/nio/DoubleBufferImpl.P \
.deps/gnu/java/nio/DoubleViewBufferImpl.P \
-.deps/gnu/java/nio/FileChannelImpl.P \
+.deps/gnu/java/nio/FileChannelImpl.P .deps/gnu/java/nio/FileLockImpl.P \
.deps/gnu/java/nio/FloatBufferImpl.P \
.deps/gnu/java/nio/FloatViewBufferImpl.P \
.deps/gnu/java/nio/IntBufferImpl.P \
.deps/gnu/java/nio/charset/UTF_8.P \
.deps/gnu/java/nio/natDirectByteBufferImpl.P \
.deps/gnu/java/nio/natFileChannelImpl.P \
+.deps/gnu/java/nio/natFileLockImpl.P \
.deps/gnu/java/nio/natMappedByteFileBuffer.P \
.deps/gnu/java/nio/natSelectorImpl.P \
.deps/gnu/java/nio/natSocketChannelImpl.P \
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
+
package gnu.java.nio;
+import java.io.FileDescriptor;
+import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
/**
* @author Michael Koch
+ * @since 1.4
*/
public class FileLockImpl extends FileLock
{
- public FileLockImpl (FileChannel channel, long position, long size,
- boolean shared)
+ private FileDescriptor fd;
+ private boolean released;
+
+ public FileLockImpl (FileDescriptor fd, FileChannel channel, long position,
+ long size, boolean shared)
{
super (channel, position, size, shared);
+ this.fd = fd;
+ this.released = false;
}
public boolean isValid ()
{
- throw new Error ("Not implemented");
+ return (released || !channel.isOpen ());
}
- public void release ()
+ private native void releaseImpl () throws IOException;
+
+ public synchronized void release () throws IOException
{
- throw new Error ("Not implemented");
+ releaseImpl ();
+ released = true;
}
}
SelectorImpl impl;
SelectableChannel ch;
- public SelectionKeyImpl(SelectableChannel ch, SelectorImpl impl, int fd)
+ public SelectionKeyImpl (SelectableChannel ch, SelectorImpl impl, int fd)
{
this.ch = ch;
this.impl = impl;
// return impl;
// }
// else
-
+
if (ch instanceof SocketChannelImpl)
- {
+ {
SocketChannelImpl sc = (SocketChannelImpl) ch;
SelectionKeyImpl impl = new SelectionKeyImpl (ch, this, sc.fd);
add (impl);
impl.interestOps (ops);
impl.attach (att);
return impl;
- }
+ }
else if (ch instanceof DatagramChannelImpl)
{
DatagramChannelImpl dc = (DatagramChannelImpl) ch;
return impl;
}
else
- {
+ {
System.err.println ("INTERNAL ERROR, no known channel type");
- }
+ }
return null;
}
public void finalizer()
{
if (connected)
- {
+ {
try
{
- close();
+ close ();
}
catch (Exception e)
{
}
- }
+ }
}
protected void implCloseSelectableChannel () throws IOException
fd = SocketChannelImpl.SocketCreate ();
}
- protected void implConfigureBlocking (boolean block) throws IOException
+ protected void implConfigureBlocking (boolean blocking) throws IOException
{
- blocking = block;
+ this.blocking = blocking;
}
- public SocketChannel accept ()
+ public SocketChannel accept () throws IOException
{
SocketChannelImpl result = new SocketChannelImpl (provider ());
result.sa = new InetSocketAddress (0);
public void finalizer()
{
if (connected)
- {
+ {
try
{
- close();
+ close ();
}
catch (Exception e)
{
}
- }
+ }
}
- protected void implCloseSelectableChannel()
+ protected void implCloseSelectableChannel () throws IOException
{
connected = false;
SocketClose(fd);
fd = SocketCreate();
}
- protected void implConfigureBlocking(boolean block)
+ protected void implConfigureBlocking (boolean blocking) throws IOException
{
- if (blocking == block)
- return;
+ if (this.blocking == blocking)
+ return;
}
- public boolean connect(SocketAddress remote)
- throws IOException
+ public boolean connect (SocketAddress remote) throws IOException
{
if (connected)
- {
- throw new AlreadyConnectedException();
- }
+ {
+ throw new AlreadyConnectedException ();
+ }
// ok, lets connect !
return blocking;
}
- public boolean finishConnect()
+ public boolean finishConnect ()
{
return false;
}
- public boolean isConnected()
+ public boolean isConnected ()
{
return connected;
}
- public boolean isConnectionPending()
+ public boolean isConnectionPending ()
{
if (blocking)
return true;
return false;
}
- public Socket socket()
+ public Socket socket ()
{
if (sock_object != null)
{
return sock_object;
}
- public int read(ByteBuffer dst)
+ public int read (ByteBuffer dst) throws IOException
{
int bytes = 0;
int len = 1024;
dst.put(b, 0, bytes);
if (bytes == 0)
- {
+ {
// we've hit eof ?
return -1;
- }
+ }
return bytes;
}
- public long read(ByteBuffer[] dsts, int offset, int length)
+ public long read (ByteBuffer[] dsts, int offset, int length)
+ throws IOException
{
long bytes = 0;
- for (int i=offset; i<length; i++)
- {
- bytes += read(dsts[i]);
- }
+ for (int i = offset; i < length; i++)
+ {
+ bytes += read (dsts [i]);
+ }
return bytes;
}
- public int write(ByteBuffer src)
+ public int write (ByteBuffer src)
+ throws IOException
{
int bytes = 0;
int len = src.position();
}
public long write (ByteBuffer[] srcs, int offset, int length)
+ throws IOException
{
long bytes = 0;
- for (int i=offset; i<length; i++)
- {
- bytes += write(srcs[i]);
- }
+ for (int i = offset; i < length; i++)
+ {
+ bytes += write (srcs [i]);
+ }
return bytes;
}
--- /dev/null
+// natFileLockImpl.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 <config.h>
+
+#include <jvm.h>
+#include <errno.h>
+
+#include <gnu/java/nio/FileLockImpl.h>
+#include <java/io/FileDescriptor.h>
+#include <java/io/IOException.h>
+
+void
+gnu::java::nio::FileLockImpl::releaseImpl ()
+{
+ throw new ::java::io::IOException
+ (JvNewStringUTF ("releaseImpl not implemented"));
+}
*/
public final boolean overlaps (long position, long size)
{
- if (position > this.position +this.size)
+ if (position > this.position + this.size)
return false;
if (position + size < this.position)