From: Michael Koch Date: Fri, 23 Jan 2004 14:37:09 +0000 (+0000) Subject: FileLockImpl.java: Fixed filename in copyright. X-Git-Tag: releases/gcc-4.0.0~10801 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9719e37cec64c4a3e2b31c1141dbdd5979f6d69c;p=thirdparty%2Fgcc.git FileLockImpl.java: Fixed filename in copyright. 2004-01-23 Michael Koch * gnu/java/nio/FileLockImpl.java: Fixed filename in copyright. (released): Removed. (finalize): New method. * gnu/java/nio/natFileLockImpl.cc (releaseImpl): Implemented. * java/nio/channels/FileChannelImpl.java: Reworked imports. (lock): Implemented. (lockImpl): New method. (tryLock): Implemented. (tryLockImpl): New method. * java/nio/channels/natFileChannelImpl.cc (lockImpl): New method. (tryLockImpl): New method. From-SVN: r76422 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 1d25820785f8..578a308d8dab 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,21 @@ +2004-01-23 Michael Koch + + * gnu/java/nio/FileLockImpl.java: + Fixed filename in copyright. + (released): Removed. + (finalize): New method. + * gnu/java/nio/natFileLockImpl.cc + (releaseImpl): Implemented. + * java/nio/channels/FileChannelImpl.java: + Reworked imports. + (lock): Implemented. + (lockImpl): New method. + (tryLock): Implemented. + (tryLockImpl): New method. + * java/nio/channels/natFileChannelImpl.cc + (lockImpl): New method. + (tryLockImpl): New method. + 2004-01-23 Michael Koch * java/io/FileDescriptor.java diff --git a/libjava/gnu/java/nio/FileLockImpl.java b/libjava/gnu/java/nio/FileLockImpl.java index f85d60ad67f0..b621bd2a539b 100644 --- a/libjava/gnu/java/nio/FileLockImpl.java +++ b/libjava/gnu/java/nio/FileLockImpl.java @@ -1,5 +1,5 @@ -/* FileChannelImpl.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* FileLockImpl.java -- + Copyright (C) 2002, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -60,14 +60,24 @@ public class FileLockImpl extends FileLock } 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 void finalize() + { + try + { + release(); + } + catch (IOException e) + { + // Ignore this. + } } public boolean isValid () diff --git a/libjava/gnu/java/nio/natFileLockImpl.cc b/libjava/gnu/java/nio/natFileLockImpl.cc index 19a3b83fde75..d3d01a12df32 100644 --- a/libjava/gnu/java/nio/natFileLockImpl.cc +++ b/libjava/gnu/java/nio/natFileLockImpl.cc @@ -20,6 +20,5 @@ details. */ void gnu::java::nio::FileLockImpl::releaseImpl () { - throw new ::java::io::IOException - (JvNewStringUTF ("releaseImpl not implemented")); + fd->unlock(position(), size()); } diff --git a/libjava/java/nio/channels/FileChannelImpl.java b/libjava/java/nio/channels/FileChannelImpl.java index 89ac11ad514b..ea2526e7002f 100644 --- a/libjava/java/nio/channels/FileChannelImpl.java +++ b/libjava/java/nio/channels/FileChannelImpl.java @@ -38,6 +38,9 @@ exception statement from your version. */ package java.nio.channels; +import gnu.classpath.Configuration; +import gnu.gcj.RawData; +import gnu.java.nio.FileLockImpl; import java.io.EOFException; import java.io.FileDescriptor; import java.io.FileInputStream; @@ -47,8 +50,6 @@ import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.MappedByteBufferImpl; -import gnu.classpath.Configuration; -import gnu.gcj.RawData; /** * This file is not user visible ! @@ -354,8 +355,22 @@ public class FileChannelImpl extends FileChannel file_obj instanceof FileInputStream) throw new NonWritableChannelException (); - throw new Error ("Not implemented"); + boolean completed = false; + + try + { + begin(); + lockImpl(position, size, shared); + completed = true; + return new FileLockImpl(fd, this, position, size, shared); + } + finally + { + end(completed); + } } + + private native void lockImpl(long position, long size, boolean shared); public FileLock tryLock (long position, long size, boolean shared) throws IOException @@ -367,9 +382,27 @@ public class FileChannelImpl extends FileChannel if (!isOpen ()) throw new ClosedChannelException (); - throw new Error ("Not implemented"); + if (! tryLockImpl(position, size, shared)) + return null; + + boolean completed = false; + + try + { + boolean lockable = tryLockImpl(position, size, shared); + completed = true; + return (lockable + ? new FileLockImpl(fd, this, position, size, shared) + : null); + } + finally + { + end(completed); + } } + private native boolean tryLockImpl(long position, long size, boolean shared); + public long position () throws IOException { diff --git a/libjava/java/nio/channels/natFileChannelImpl.cc b/libjava/java/nio/channels/natFileChannelImpl.cc index 8dbbd141e604..56828a46604c 100644 --- a/libjava/java/nio/channels/natFileChannelImpl.cc +++ b/libjava/java/nio/channels/natFileChannelImpl.cc @@ -25,11 +25,13 @@ details. */ #endif #include +#include #include #include #include #include #include +#include jlong java::nio::channels::FileChannelImpl::size () @@ -92,3 +94,17 @@ java::nio::channels::FileChannelImpl::nio_msync (gnu::gcj::RawData* /*map_addres { throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented")); } + +void +java::nio::channels::FileChannelImpl::lockImpl(jlong position, jlong size, jboolean shared) +{ + // FIXME: shared is unused, write is always true. + fd->lock(position, size, true); +} + +jboolean +java::nio::channels::FileChannelImpl::tryLockImpl(jlong position, jlong size, jboolean shared) +{ + // FIXME: shared is unused, write is always true. + return fd->tryLock(position, size, true); +}