diff options
author | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-04-29 18:47:42 +0000 |
---|---|---|
committer | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-04-29 18:47:42 +0000 |
commit | a809cb64cf76259d2d0b87e14332a227c34da5ea (patch) | |
tree | a633006bbff08f9d9c68b140ddd9e2656e06ec70 | |
parent | f53ce661177e4d4d44f53bd236857c26e5de43a3 (diff) | |
download | ppe42-gcc-a809cb64cf76259d2d0b87e14332a227c34da5ea.tar.gz ppe42-gcc-a809cb64cf76259d2d0b87e14332a227c34da5ea.zip |
2005-04-29 Dalibor Topic <robilad@kaffe.org>
* java/nio/channels/FileChannelImpl.java
(FileChannelImpl(String, int)): Removed.
(FileChannelImpl(File, int)): Added. Check if opened file is a
directory.
* java/io/FileInputStream.java(FileInputStream): Fixed javadocs.
Call FileChannelImpl(File, int).
* java/io/FileOutputStream.java (FileInputStream): Call
FileChannelImpl(File, int).
* java/io/RandomAccessFile.java (RandomAccessFile):
Call FileChannelImpl(File, int). Switched constructors around.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99011 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libjava/ChangeLog | 13 | ||||
-rw-r--r-- | libjava/gnu/java/nio/channels/FileChannelImpl.java | 20 | ||||
-rw-r--r-- | libjava/java/io/FileInputStream.java | 8 | ||||
-rw-r--r-- | libjava/java/io/FileOutputStream.java | 8 | ||||
-rw-r--r-- | libjava/java/io/RandomAccessFile.java | 62 |
5 files changed, 74 insertions, 37 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 68bee9172f0..5a8022eecf8 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,16 @@ +2005-04-29 Dalibor Topic <robilad@kaffe.org> + + * java/nio/channels/FileChannelImpl.java + (FileChannelImpl(String, int)): Removed. + (FileChannelImpl(File, int)): Added. Check if opened file is a + directory. + * java/io/FileInputStream.java(FileInputStream): Fixed javadocs. + Call FileChannelImpl(File, int). + * java/io/FileOutputStream.java (FileInputStream): Call + FileChannelImpl(File, int). + * java/io/RandomAccessFile.java (RandomAccessFile): + Call FileChannelImpl(File, int). Switched constructors around. + 2005-04-27 Andrew Haley <aph@redhat.com> PR java/19285 diff --git a/libjava/gnu/java/nio/channels/FileChannelImpl.java b/libjava/gnu/java/nio/channels/FileChannelImpl.java index 9d978c923f7..aaa4c260864 100644 --- a/libjava/gnu/java/nio/channels/FileChannelImpl.java +++ b/libjava/gnu/java/nio/channels/FileChannelImpl.java @@ -41,6 +41,7 @@ package gnu.java.nio.channels; import gnu.classpath.Configuration; import gnu.java.nio.FileLockImpl; +import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteBuffer; @@ -102,10 +103,27 @@ public final class FileChannelImpl extends FileChannel } /* Open a file. MODE is a combination of the above mode flags. */ - public FileChannelImpl (String path, int mode) throws FileNotFoundException + public FileChannelImpl (File file, int mode) throws FileNotFoundException { + final String path = file.getPath(); fd = open (path, mode); this.mode = mode; + + // First open the file and then check if it is a a directory + // to avoid race condition. + if (file.isDirectory()) + { + try + { + close(); + } + catch (IOException e) + { + /* ignore it */ + } + + throw new FileNotFoundException(path + " is a directory"); + } } /* Used by init() (native code) */ diff --git a/libjava/java/io/FileInputStream.java b/libjava/java/io/FileInputStream.java index ebd5d20ad46..c719955434f 100644 --- a/libjava/java/io/FileInputStream.java +++ b/libjava/java/io/FileInputStream.java @@ -76,7 +76,8 @@ public class FileInputStream extends InputStream * @param name The name of the file this stream should read from * * @exception SecurityException If read access to the file is not allowed - * @exception FileNotFoundException If the file does not exist. + * @exception FileNotFoundException If the file does not exist + * or if it is a directory */ public FileInputStream(String name) throws FileNotFoundException { @@ -97,7 +98,8 @@ public class FileInputStream extends InputStream * @param file The <code>File</code> object this stream should read from * * @exception SecurityException If read access to the file is not allowed - * @exception FileNotFoundException If the file does not exist. + * @exception FileNotFoundException If the file does not exist + * or if it is a directory. */ public FileInputStream(File file) throws FileNotFoundException { @@ -105,7 +107,7 @@ public class FileInputStream extends InputStream if (s != null) s.checkRead(file.getPath()); - ch = new FileChannelImpl (file.getPath(), FileChannelImpl.READ); + ch = new FileChannelImpl (file, FileChannelImpl.READ); } /** diff --git a/libjava/java/io/FileOutputStream.java b/libjava/java/io/FileOutputStream.java index d5fa2d3bb99..e8784429e63 100644 --- a/libjava/java/io/FileOutputStream.java +++ b/libjava/java/io/FileOutputStream.java @@ -155,10 +155,10 @@ public class FileOutputStream extends OutputStream if (s != null) s.checkWrite(file.getPath()); - ch = new FileChannelImpl (file.getPath(), (append - ? FileChannelImpl.WRITE - | FileChannelImpl.APPEND - : FileChannelImpl.WRITE)); + ch = new FileChannelImpl (file, (append + ? FileChannelImpl.WRITE + | FileChannelImpl.APPEND + : FileChannelImpl.WRITE)); } /** diff --git a/libjava/java/io/RandomAccessFile.java b/libjava/java/io/RandomAccessFile.java index c23ca3adf2e..ef367949a24 100644 --- a/libjava/java/io/RandomAccessFile.java +++ b/libjava/java/io/RandomAccessFile.java @@ -86,38 +86,12 @@ public class RandomAccessFile implements DataOutput, DataInput * illegal value * @exception SecurityException If the requested access to the file * is not allowed - * @exception IOException If any other error occurs + * @exception FileNotFoundException If the file is a directory, or + * any other error occurs */ public RandomAccessFile (File file, String mode) throws FileNotFoundException { - this (file.getPath(), mode); - } - - /** - * This method initializes a new instance of <code>RandomAccessFile</code> - * to read from the specified file name with the specified access mode. - * 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. - * <p> - * Note that a <code>SecurityManager</code> 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", "rw", "rws", or "rwd" - * - * @exception IllegalArgumentException If <code>mode</code> has an - * illegal value - * @exception SecurityException If the requested access to the file - * is not allowed - * @exception FileNotFoundException If any other error occurs - */ - public RandomAccessFile (String fileName, String mode) - throws FileNotFoundException - { int fdmode; if (mode.equals("r")) fdmode = FileChannelImpl.READ; @@ -136,6 +110,8 @@ public class RandomAccessFile implements DataOutput, DataInput else throw new IllegalArgumentException ("invalid mode: " + mode); + final String fileName = file.getPath(); + // The obligatory SecurityManager stuff SecurityManager s = System.getSecurityManager(); if (s != null) @@ -146,13 +122,41 @@ public class RandomAccessFile implements DataOutput, DataInput s.checkWrite(fileName); } - ch = new FileChannelImpl (fileName, fdmode); + ch = new FileChannelImpl (file, fdmode); fd = new FileDescriptor(ch); out = new DataOutputStream (new FileOutputStream (fd)); in = new DataInputStream (new FileInputStream (fd)); } /** + * This method initializes a new instance of <code>RandomAccessFile</code> + * to read from the specified file name with the specified access mode. + * 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. + * <p> + * Note that a <code>SecurityManager</code> 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", "rw", "rws", or "rwd" + * + * @exception IllegalArgumentException If <code>mode</code> has an + * illegal value + * @exception SecurityException If the requested access to the file + * is not allowed + * @exception FileNotFoundException If the file is a directory or + * any other error occurs + */ + public RandomAccessFile (String fileName, String mode) + throws FileNotFoundException + { + this (new File(fileName), mode); + } + + /** * This method closes the file and frees up all file related system * resources. Since most operating systems put a limit on how many files * may be opened at any given time, it is a good idea to close all files |