Commit b61ae8b2 by Dalibor Topic Committed by Michael Koch

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.

From-SVN: r99011
parent 2c80f015
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> 2005-04-27 Andrew Haley <aph@redhat.com>
PR java/19285 PR java/19285
......
...@@ -41,6 +41,7 @@ package gnu.java.nio.channels; ...@@ -41,6 +41,7 @@ package gnu.java.nio.channels;
import gnu.classpath.Configuration; import gnu.classpath.Configuration;
import gnu.java.nio.FileLockImpl; import gnu.java.nio.FileLockImpl;
import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
...@@ -102,10 +103,27 @@ public final class FileChannelImpl extends FileChannel ...@@ -102,10 +103,27 @@ public final class FileChannelImpl extends FileChannel
} }
/* Open a file. MODE is a combination of the above mode flags. */ /* 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); fd = open (path, mode);
this.mode = 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) */ /* Used by init() (native code) */
......
...@@ -76,7 +76,8 @@ public class FileInputStream extends InputStream ...@@ -76,7 +76,8 @@ public class FileInputStream extends InputStream
* @param name The name of the file this stream should read from * @param name The name of the file this stream should read from
* *
* @exception SecurityException If read access to the file is not allowed * @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 public FileInputStream(String name) throws FileNotFoundException
{ {
...@@ -97,7 +98,8 @@ public class FileInputStream extends InputStream ...@@ -97,7 +98,8 @@ public class FileInputStream extends InputStream
* @param file The <code>File</code> object this stream should read from * @param file The <code>File</code> object this stream should read from
* *
* @exception SecurityException If read access to the file is not allowed * @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 public FileInputStream(File file) throws FileNotFoundException
{ {
...@@ -105,7 +107,7 @@ public class FileInputStream extends InputStream ...@@ -105,7 +107,7 @@ public class FileInputStream extends InputStream
if (s != null) if (s != null)
s.checkRead(file.getPath()); s.checkRead(file.getPath());
ch = new FileChannelImpl (file.getPath(), FileChannelImpl.READ); ch = new FileChannelImpl (file, FileChannelImpl.READ);
} }
/** /**
......
...@@ -155,10 +155,10 @@ public class FileOutputStream extends OutputStream ...@@ -155,10 +155,10 @@ public class FileOutputStream extends OutputStream
if (s != null) if (s != null)
s.checkWrite(file.getPath()); s.checkWrite(file.getPath());
ch = new FileChannelImpl (file.getPath(), (append ch = new FileChannelImpl (file, (append
? FileChannelImpl.WRITE ? FileChannelImpl.WRITE
| FileChannelImpl.APPEND | FileChannelImpl.APPEND
: FileChannelImpl.WRITE)); : FileChannelImpl.WRITE));
} }
/** /**
......
...@@ -86,38 +86,12 @@ public class RandomAccessFile implements DataOutput, DataInput ...@@ -86,38 +86,12 @@ public class RandomAccessFile implements DataOutput, DataInput
* illegal value * illegal value
* @exception SecurityException If the requested access to the file * @exception SecurityException If the requested access to the file
* is not allowed * 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) public RandomAccessFile (File file, String mode)
throws FileNotFoundException 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; int fdmode;
if (mode.equals("r")) if (mode.equals("r"))
fdmode = FileChannelImpl.READ; fdmode = FileChannelImpl.READ;
...@@ -136,6 +110,8 @@ public class RandomAccessFile implements DataOutput, DataInput ...@@ -136,6 +110,8 @@ public class RandomAccessFile implements DataOutput, DataInput
else else
throw new IllegalArgumentException ("invalid mode: " + mode); throw new IllegalArgumentException ("invalid mode: " + mode);
final String fileName = file.getPath();
// The obligatory SecurityManager stuff // The obligatory SecurityManager stuff
SecurityManager s = System.getSecurityManager(); SecurityManager s = System.getSecurityManager();
if (s != null) if (s != null)
...@@ -146,13 +122,41 @@ public class RandomAccessFile implements DataOutput, DataInput ...@@ -146,13 +122,41 @@ public class RandomAccessFile implements DataOutput, DataInput
s.checkWrite(fileName); s.checkWrite(fileName);
} }
ch = new FileChannelImpl (fileName, fdmode); ch = new FileChannelImpl (file, fdmode);
fd = new FileDescriptor(ch); fd = new FileDescriptor(ch);
out = new DataOutputStream (new FileOutputStream (fd)); out = new DataOutputStream (new FileOutputStream (fd));
in = new DataInputStream (new FileInputStream (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 * This method closes the file and frees up all file related system
* resources. Since most operating systems put a limit on how many files * 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 * may be opened at any given time, it is a good idea to close all files
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment