From ca1d829f319a0919f6543933cd7f561e3ae5bf64 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Fri, 23 Jan 2004 14:07:28 +0000 Subject: 2004-01-23 Michael Koch * java/io/FileDescriptor.java (lock): New method. (tryLock): New method. (unlock): New method. * java/io/natFileDescriptorEcos.cc (lock): New method. (tryLock): New method. (unlock): New method. * java/io/natFileDescriptorPosix.cc (lock): New method. (tryLock): New method. (unlock): New method. * java/io/natFileDescriptorWin32.cc (lock): New method. (tryLock): New method. (unlock): New method. From-SVN: r76421 --- libjava/ChangeLog | 19 +++++++++++++ libjava/java/io/FileDescriptor.java | 4 +++ libjava/java/io/natFileDescriptorEcos.cc | 21 +++++++++++++++ libjava/java/io/natFileDescriptorPosix.cc | 45 +++++++++++++++++++++++++++++++ libjava/java/io/natFileDescriptorWin32.cc | 21 +++++++++++++++ 5 files changed, 110 insertions(+) (limited to 'libjava') diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 4aba02a..1d25820 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,6 +1,25 @@ 2004-01-23 Michael Koch * java/io/FileDescriptor.java + (lock): New method. + (tryLock): New method. + (unlock): New method. + * java/io/natFileDescriptorEcos.cc + (lock): New method. + (tryLock): New method. + (unlock): New method. + * java/io/natFileDescriptorPosix.cc + (lock): New method. + (tryLock): New method. + (unlock): New method. + * java/io/natFileDescriptorWin32.cc + (lock): New method. + (tryLock): New method. + (unlock): New method. + +2004-01-23 Michael Koch + + * java/io/FileDescriptor.java (sync): Moved around, added javadoc. (valid): Likewise. (open): Likewise. diff --git a/libjava/java/io/FileDescriptor.java b/libjava/java/io/FileDescriptor.java index b713e1b..109d246 100644 --- a/libjava/java/io/FileDescriptor.java +++ b/libjava/java/io/FileDescriptor.java @@ -208,6 +208,10 @@ public final class FileDescriptor native long getLength() throws IOException; native void setLength(long pos) throws IOException; + native void lock(long pos, int len, boolean shared) throws IOException; + native boolean tryLock(long pos, int lent, boolean shared) throws IOException; + native void unlock(long pos, int len) throws IOException; + // When collected, close. protected void finalize() throws Throwable { diff --git a/libjava/java/io/natFileDescriptorEcos.cc b/libjava/java/io/natFileDescriptorEcos.cc index 2f87912..6671307 100644 --- a/libjava/java/io/natFileDescriptorEcos.cc +++ b/libjava/java/io/natFileDescriptorEcos.cc @@ -136,3 +136,24 @@ java::io::FileDescriptor::available (void) { return 0; } + +void +java::io::FileDescriptor::lock (jlong pos, jint len, jboolean shared) +{ + throw new IOException (JvNewStringLatin1 + ("java.io.FileDescriptor.lock() not implemented")); +} + +jboolean +java::io::FileDescriptor::tryLock (jlong pos, jint len, jboolean shared) +{ + throw new IOException (JvNewStringLatin1 + ("java.io.FileDescriptor.tryLock() not implemented")); +} + +void +java::io::FileDescriptor::unlock (jlong pos, jint len) +{ + throw new IOException (JvNewStringLatin1 + ("java.io.FileDescriptor.unlock() not implemented")); +} diff --git a/libjava/java/io/natFileDescriptorPosix.cc b/libjava/java/io/natFileDescriptorPosix.cc index e43bb9d..7c36669 100644 --- a/libjava/java/io/natFileDescriptorPosix.cc +++ b/libjava/java/io/natFileDescriptorPosix.cc @@ -13,6 +13,7 @@ details. */ #include "posix.h" #include +#include #include #include #include @@ -420,3 +421,47 @@ java::io::FileDescriptor::available (void) return 0; #endif } + +void +java::io::FileDescriptor::lock (jlong pos, jint len, jboolean shared) +{ + struct flock lockdata; + + lockdata.l_type = shared ? F_WRLCK : F_RDLCK; + lockdata.l_whence = SEEK_SET; + lockdata.l_start = pos; + lockdata.l_len = len; + + if (::fcntl (fd, F_SETLK, &lockdata) == -1) + throw new IOException (JvNewStringLatin1 (strerror (errno))); +} + +jboolean +java::io::FileDescriptor::tryLock (jlong pos, jint len, jboolean shared) +{ + struct flock lockdata; + + lockdata.l_type = shared ? F_WRLCK : F_RDLCK; + lockdata.l_whence = SEEK_SET; + lockdata.l_start = pos; + lockdata.l_len = len; + + if (::fcntl (fd, F_GETLK, &lockdata) == -1) + throw new IOException (JvNewStringLatin1 (strerror (errno))); + + return lockdata.l_type == F_UNLCK; +} + +void +java::io::FileDescriptor::unlock (jlong pos, jint len) +{ + struct flock lockdata; + + lockdata.l_type = F_UNLCK; + lockdata.l_whence = SEEK_SET; + lockdata.l_start = pos; + lockdata.l_len = len; + + if (::fcntl (fd, F_SETLK, &lockdata) == -1) + throw new IOException (JvNewStringLatin1 (strerror (errno))); +} diff --git a/libjava/java/io/natFileDescriptorWin32.cc b/libjava/java/io/natFileDescriptorWin32.cc index 7811a73..fd9d975 100644 --- a/libjava/java/io/natFileDescriptorWin32.cc +++ b/libjava/java/io/natFileDescriptorWin32.cc @@ -350,3 +350,24 @@ java::io::FileDescriptor::available(void) // FIXME: return getLength() - getFilePointer(); } + +void +java::io::FileDescriptor::lock (jlong pos, jint len, jboolean shared) +{ + throw new IOException (JvNewStringLatin1 + ("java.io.FileDescriptor.lock() not implemented")); +} + +jboolean +java::io::FileDescriptor::tryLock (jlong pos, jint len, jboolean shared) +{ + throw new IOException (JvNewStringLatin1 + ("java.io.FileDescriptor.tryLock() not implemented")); +} + +void +java::io::FileDescriptor::unlock (jlong pos, jint len) +{ + throw new IOException (JvNewStringLatin1 + ("java.io.FileDescriptor.unlock() not implemented")); +} -- cgit v1.1