diff options
author | Michael Koch <konqueror@gmx.de> | 2004-01-23 14:07:28 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-01-23 14:07:28 +0000 |
commit | ca1d829f319a0919f6543933cd7f561e3ae5bf64 (patch) | |
tree | fd615eae154189a9a30bcb6d68a92415141b8f9b /libjava/java/io | |
parent | 0e707673d273651f3b1f75beb53c42c9d521e3c4 (diff) | |
download | gcc-ca1d829f319a0919f6543933cd7f561e3ae5bf64.zip gcc-ca1d829f319a0919f6543933cd7f561e3ae5bf64.tar.gz gcc-ca1d829f319a0919f6543933cd7f561e3ae5bf64.tar.bz2 |
2004-01-23 Michael Koch <konqueror@gmx.de>
* 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
Diffstat (limited to 'libjava/java/io')
-rw-r--r-- | libjava/java/io/FileDescriptor.java | 4 | ||||
-rw-r--r-- | libjava/java/io/natFileDescriptorEcos.cc | 21 | ||||
-rw-r--r-- | libjava/java/io/natFileDescriptorPosix.cc | 45 | ||||
-rw-r--r-- | libjava/java/io/natFileDescriptorWin32.cc | 21 |
4 files changed, 91 insertions, 0 deletions
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 <errno.h> +#include <fcntl.h> #include <stdio.h> #include <string.h> #include <sys/stat.h> @@ -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")); +} |