diff --git a/src/filesystem/implementation.js b/src/filesystem/implementation.js index f80acf3..35dd1c4 100644 --- a/src/filesystem/implementation.js +++ b/src/filesystem/implementation.js @@ -573,11 +573,7 @@ function open_file(context, path, flags, callback) { var followedCount = 0; if(ROOT_DIRECTORY_NAME == name) { - if(_(flags).contains(O_WRITE)) { - callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set')); - } else { - find_node(context, path, set_file_node); - } + callback(new Errors.EISDIR('the named file is the root directory')); } else { find_node(context, parentPath, read_directory_data); } @@ -603,8 +599,8 @@ function open_file(context, path, flags, callback) { callback(new Errors.ENOENT('O_CREATE and O_EXCLUSIVE are set, and the named file exists')); } else { directoryEntry = directoryData[name]; - if(directoryEntry.type == MODE_DIRECTORY && _(flags).contains(O_WRITE)) { - callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set')); + if(directoryEntry.type == MODE_DIRECTORY) { + callback(new Errors.EISDIR('the named file is a directory')); } else { context.getObject(directoryEntry.id, check_if_symbolic_link); } diff --git a/tests/bugs/issue254.js b/tests/bugs/issue254.js index 0d595fb..95f4a5f 100644 --- a/tests/bugs/issue254.js +++ b/tests/bugs/issue254.js @@ -2,11 +2,11 @@ var Filer = require('../..'); var util = require('../lib/test-utils.js'); var expect = require('chai').expect; -describe('fs.readFile on a dir path', function() { +describe('EISDIR when trying to open a dir path - issue 254', function() { beforeEach(util.setup); afterEach(util.cleanup); - it('should fail with EISDIR', function(done) { + it('should fail with EISDIR for root dir', function(done) { var fs = util.fs(); fs.readFile('/', function(err) { @@ -14,4 +14,34 @@ describe('fs.readFile on a dir path', function() { done(); }); }); + + it('should fail with EISDIR for regular dir', function(done) { + var fs = util.fs(); + + fs.mkdir('/dir', function(err) { + if(err) throw err; + + fs.readFile('/dir', function(err) { + expect(err.code).to.equal('EISDIR'); + done(); + }); + }); + }); + + it('should fail with EISDIR for symlinked dir', function(done) { + var fs = util.fs(); + + fs.mkdir('/dir', function(err) { + if(err) throw err; + + fs.symlink('/dir', '/link', function(err) { + if(err) throw err; + + fs.readFile('/link', function(err) { + expect(err.code).to.equal('EISDIR'); + done(); + }); + }); + }); + }); });