From e48d8b88869563f85f2c83108257615f1cc73c76 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Tue, 13 May 2003 09:13:31 +0000 Subject: 2003-05-13 Michael Koch * java/io/FileDescriptor.java (SYNC): New constant. (DSYNC): Likewise. (getLength): Renamed from lenght() to match classpath's FileDescriptor.java. * java/io/RandomAccessFile.java (RandomAccessFile): Removed unneeded mode check, implemented mode "rws" and "rwd", merged documentation from classpath. (setLength): Reformatted. (length): Use new getLength() of FileDescriptor. * java/io/natFileDescriptorEcos.cc (getLength): Renamed from length(). * java/io/natFileDescriptorPosix.cc (open): Implemented support for SYNC and DSYNC. (seek): Use getLength() instead of length(). (getLength): Renamed from length(). * java/io/natFileDescriptorWin32.cc (getLength): Renamed from length(). (seek): Use getLength() instead of length(). (available): Likewise. * gnu/java/nio/natFileChannelImpl.cc (size): Use getLength() instead of length(). From-SVN: r66755 --- libjava/java/io/FileDescriptor.java | 4 +++- libjava/java/io/RandomAccessFile.java | 33 +++++++++++++++++++------------ libjava/java/io/natFileDescriptorEcos.cc | 2 +- libjava/java/io/natFileDescriptorPosix.cc | 10 ++++++++-- libjava/java/io/natFileDescriptorWin32.cc | 6 +++--- 5 files changed, 35 insertions(+), 20 deletions(-) (limited to 'libjava/java/io') diff --git a/libjava/java/io/FileDescriptor.java b/libjava/java/io/FileDescriptor.java index 296c37f..5c5168c 100644 --- a/libjava/java/io/FileDescriptor.java +++ b/libjava/java/io/FileDescriptor.java @@ -44,6 +44,8 @@ public final class FileDescriptor static final int APPEND = 4; // EXCL is used only when making a temp file. static final int EXCL = 8; + static final int SYNC = 16; + static final int DSYNC = 32; // These are WHENCE values for seek. static final int SET = 0; @@ -71,7 +73,7 @@ public final class FileDescriptor // past the end is ok (and if a subsequent write occurs the file // will grow). native int seek (long pos, int whence, boolean eof_trunc) throws IOException; - native long length () throws IOException; + native long getLength () throws IOException; native long getFilePointer () throws IOException; native int read () throws IOException; native int read (byte[] bytes, int offset, int len) throws IOException; diff --git a/libjava/java/io/RandomAccessFile.java b/libjava/java/io/RandomAccessFile.java index 990b2dc..0ff2ff6 100644 --- a/libjava/java/io/RandomAccessFile.java +++ b/libjava/java/io/RandomAccessFile.java @@ -96,15 +96,17 @@ public class RandomAccessFile implements DataOutput, DataInput /** * This method initializes a new instance of RandomAccessFile * to read from the specified file name with the specified access mode. - * The access mode is either "r" for read only access or "rw" for read - * write access. + * The access mode is either "r" for read only access, "rw" for read + * write access, "rws" for synchronized read/write access of both + * content and metadata, or "rwd" for read/write access + * where only content is required to be synchronous. *

* Note that a SecurityManager check is made prior to * opening the file to determine whether or not this file is allowed to * be read or written. * * @param fileName The name of the file to read and/or write - * @param mode "r" for read only or "rw" for read-write access to the file + * @param mode "r", "rw", "rws", or "rwd" * * @exception IllegalArgumentException If mode has an * illegal value @@ -115,16 +117,21 @@ public class RandomAccessFile implements DataOutput, DataInput public RandomAccessFile (String fileName, String mode) throws FileNotFoundException { - // Check the mode - if (!mode.equals("r") && !mode.equals("rw") && !mode.equals("rws") && - !mode.equals("rwd")) - throw new IllegalArgumentException("Bad mode value: " + mode); - int fdmode; - if (mode.compareTo ("r") == 0) + if (mode.equals("r")) fdmode = FileDescriptor.READ; - else if (mode.compareTo ("rw") == 0) + else if (mode.equals("rw")) fdmode = FileDescriptor.READ | FileDescriptor.WRITE; + else if (mode.equals("rws")) + { + fdmode = (FileDescriptor.READ | FileDescriptor.WRITE + | FileDescriptor.SYNC); + } + else if (mode.equals("rwd")) + { + fdmode = (FileDescriptor.READ | FileDescriptor.WRITE + | FileDescriptor.DSYNC); + } else throw new IllegalArgumentException ("invalid mode: " + mode); @@ -197,9 +204,9 @@ public class RandomAccessFile implements DataOutput, DataInput * * @exception IOException If an error occurs */ - public void setLength (long pos) throws IOException + public void setLength (long newLen) throws IOException { - fd.setLength(pos); + fd.setLength (newLen); } /** @@ -211,7 +218,7 @@ public class RandomAccessFile implements DataOutput, DataInput */ public long length () throws IOException { - return fd.length(); + return fd.getLength (); } /** diff --git a/libjava/java/io/natFileDescriptorEcos.cc b/libjava/java/io/natFileDescriptorEcos.cc index 96744f4..2f87912 100644 --- a/libjava/java/io/natFileDescriptorEcos.cc +++ b/libjava/java/io/natFileDescriptorEcos.cc @@ -108,7 +108,7 @@ java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean) } jlong -java::io::FileDescriptor::length (void) +java::io::FileDescriptor::getLength (void) { return 0; } diff --git a/libjava/java/io/natFileDescriptorPosix.cc b/libjava/java/io/natFileDescriptorPosix.cc index ad1dcc4..2ad2d9d 100644 --- a/libjava/java/io/natFileDescriptorPosix.cc +++ b/libjava/java/io/natFileDescriptorPosix.cc @@ -105,6 +105,12 @@ java::io::FileDescriptor::open (jstring path, jint jflags) } } + if ((jflags & SYNC)) + flags |= O_SYNC; + + if ((jflags & DSYNC)) + flags |= O_DSYNC; + int fd = ::open (buf, flags, mode); if (fd == -1 && errno == EMFILE) { @@ -233,7 +239,7 @@ java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc) if (eof_trunc) { - jlong len = length (); + jlong len = getLength (); if (whence == SET) { if (pos > len) @@ -258,7 +264,7 @@ java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc) } jlong -java::io::FileDescriptor::length (void) +java::io::FileDescriptor::getLength (void) { struct stat sb; if (::fstat (fd, &sb)) diff --git a/libjava/java/io/natFileDescriptorWin32.cc b/libjava/java/io/natFileDescriptorWin32.cc index 87f94e8..210eb73 100644 --- a/libjava/java/io/natFileDescriptorWin32.cc +++ b/libjava/java/io/natFileDescriptorWin32.cc @@ -244,7 +244,7 @@ java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc) { JvAssert (whence == SET || whence == CUR); - jlong len = length(); + jlong len = getLength(); jlong here = getFilePointer(); if (eof_trunc @@ -272,7 +272,7 @@ java::io::FileDescriptor::getFilePointer(void) } jlong -java::io::FileDescriptor::length(void) +java::io::FileDescriptor::getLength(void) { DWORD high; DWORD low; @@ -336,5 +336,5 @@ jint java::io::FileDescriptor::available(void) { // FIXME: - return length() - getFilePointer(); + return getLength() - getFilePointer(); } -- cgit v1.1