aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io/natFileDescriptorPosix.cc
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2004-01-23 14:07:28 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2004-01-23 14:07:28 +0000
commitca1d829f319a0919f6543933cd7f561e3ae5bf64 (patch)
treefd615eae154189a9a30bcb6d68a92415141b8f9b /libjava/java/io/natFileDescriptorPosix.cc
parent0e707673d273651f3b1f75beb53c42c9d521e3c4 (diff)
downloadgcc-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/natFileDescriptorPosix.cc')
-rw-r--r--libjava/java/io/natFileDescriptorPosix.cc45
1 files changed, 45 insertions, 0 deletions
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)));
+}