diff options
Diffstat (limited to 'libjava/gnu/java/nio/channels/FileChannelImpl.java')
-rw-r--r-- | libjava/gnu/java/nio/channels/FileChannelImpl.java | 20 |
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) */ |