diff options
author | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-23 14:07:28 +0000 |
---|---|---|
committer | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-23 14:07:28 +0000 |
commit | d0ce7655692d3fd3784b97217cf8fc0e258df18f (patch) | |
tree | fd615eae154189a9a30bcb6d68a92415141b8f9b /libjava/java | |
parent | 20d663ad97273ff63eccdbefef95a2eecc03d044 (diff) | |
download | ppe42-gcc-d0ce7655692d3fd3784b97217cf8fc0e258df18f.tar.gz ppe42-gcc-d0ce7655692d3fd3784b97217cf8fc0e258df18f.zip |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76421 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java')
-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 b713e1bf688..109d2468783 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 2f879128fff..66713079a86 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 e43bb9d1135..7c36669d27f 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 7811a73f493..fd9d9755e69 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")); +} |