2004-01-23 Michael Koch <konqueror@gmx.de>
authorMichael Koch <konqueror@gmx.de>
Fri, 23 Jan 2004 14:07:28 +0000 (14:07 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Fri, 23 Jan 2004 14:07:28 +0000 (14:07 +0000)
* 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
libjava/java/io/FileDescriptor.java
libjava/java/io/natFileDescriptorEcos.cc
libjava/java/io/natFileDescriptorPosix.cc
libjava/java/io/natFileDescriptorWin32.cc

index 4aba02a19d83466d1347bad75f76a98c2f2ff9af..1d25820785f81599eaa8d91af26701cbcd4045cb 100644 (file)
@@ -1,3 +1,22 @@
+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.
+
 2004-01-23  Michael Koch  <konqueror@gmx.de>
 
        * java/io/FileDescriptor.java
index b713e1bf6884baea7720212345d99dafabfec89e..109d2468783d47bbc9726db8d18eacec058e4c29 100644 (file)
@@ -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
   {
index 2f879128fff9cb5db8ed7d34b8240f96693ff49e..66713079a8600d1ea577e27b72764815feb88e52 100644 (file)
@@ -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"));
+}
index e43bb9d113591241b3dfaaa118edc0fc03278648..7c36669d27f0902c804758e4d94bc442c9cffc0b 100644 (file)
@@ -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)));
+}
index 7811a73f4938c799103d9f93a0b8109e6477702b..fd9d9755e69fb00b3d6702a160531e3471055f83 100644 (file)
@@ -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"));
+}