summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r--libjava/gnu/java/nio/channels/FileChannelImpl.java20
1 files changed, 19 insertions, 1 deletions
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) */
OpenPOWER on IntegriCloud