From: Michael Koch Date: Tue, 13 May 2003 09:13:31 +0000 (+0000) Subject: 2003-05-13 Michael Koch X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e48d8b88869563f85f2c83108257615f1cc73c76;p=gcc.git 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 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index baa470a9461..363681efcea 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,28 @@ +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(). + 2003-05-13 Michael Koch * gnu/java/nio/ByteBufferImpl.java diff --git a/libjava/gnu/java/nio/natFileChannelImpl.cc b/libjava/gnu/java/nio/natFileChannelImpl.cc index b33a79f16f6..6275b6994d9 100644 --- a/libjava/gnu/java/nio/natFileChannelImpl.cc +++ b/libjava/gnu/java/nio/natFileChannelImpl.cc @@ -34,7 +34,7 @@ details. */ jlong gnu::java::nio::FileChannelImpl::size () { - return fd->length (); + return fd->getLength (); } jlong diff --git a/libjava/java/io/FileDescriptor.java b/libjava/java/io/FileDescriptor.java index 296c37f8b8a..5c5168c272c 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 990b2dcb5bd..0ff2ff65ce9 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 96744f42e44..2f879128fff 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 ad1dcc49c32..2ad2d9dce77 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 87f94e81222..210eb73cbbb 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(); }