|
@ -98,6 +98,18 @@ function assertEncoding(encoding) { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function nullCheck(path, callback) { |
|
|
|
|
|
if (('' + path).indexOf('\u0000') !== -1) { |
|
|
|
|
|
var er = new Error('Path must be a string without null bytes.'); |
|
|
|
|
|
if (!callback) |
|
|
|
|
|
throw er; |
|
|
|
|
|
process.nextTick(function() { |
|
|
|
|
|
callback(er); |
|
|
|
|
|
}); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
fs.Stats = binding.Stats; |
|
|
fs.Stats = binding.Stats; |
|
|
|
|
|
|
|
@ -134,13 +146,16 @@ fs.Stats.prototype.isSocket = function() { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.exists = function(path, callback) { |
|
|
fs.exists = function(path, callback) { |
|
|
binding.stat(pathModule._makeLong(path), function(err, stats) { |
|
|
if (!nullCheck(path, cb)) return; |
|
|
|
|
|
binding.stat(pathModule._makeLong(path), cb); |
|
|
|
|
|
function cb(err, stats) { |
|
|
if (callback) callback(err ? false : true); |
|
|
if (callback) callback(err ? false : true); |
|
|
}); |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.existsSync = function(path) { |
|
|
fs.existsSync = function(path) { |
|
|
try { |
|
|
try { |
|
|
|
|
|
nullCheck(path); |
|
|
binding.stat(pathModule._makeLong(path)); |
|
|
binding.stat(pathModule._makeLong(path)); |
|
|
return true; |
|
|
return true; |
|
|
} catch (e) { |
|
|
} catch (e) { |
|
@ -362,6 +377,7 @@ fs.open = function(path, flags, mode, callback) { |
|
|
callback = makeCallback(arguments[arguments.length - 1]); |
|
|
callback = makeCallback(arguments[arguments.length - 1]); |
|
|
mode = modeNum(mode, 438 /*=0666*/); |
|
|
mode = modeNum(mode, 438 /*=0666*/); |
|
|
|
|
|
|
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
binding.open(pathModule._makeLong(path), |
|
|
binding.open(pathModule._makeLong(path), |
|
|
stringToFlags(flags), |
|
|
stringToFlags(flags), |
|
|
mode, |
|
|
mode, |
|
@ -370,6 +386,7 @@ fs.open = function(path, flags, mode, callback) { |
|
|
|
|
|
|
|
|
fs.openSync = function(path, flags, mode) { |
|
|
fs.openSync = function(path, flags, mode) { |
|
|
mode = modeNum(mode, 438 /*=0666*/); |
|
|
mode = modeNum(mode, 438 /*=0666*/); |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); |
|
|
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -475,12 +492,17 @@ fs.writeSync = function(fd, buffer, offset, length, position) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.rename = function(oldPath, newPath, callback) { |
|
|
fs.rename = function(oldPath, newPath, callback) { |
|
|
|
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(oldPath, callback)) return; |
|
|
|
|
|
if (!nullCheck(newPath, callback)) return; |
|
|
binding.rename(pathModule._makeLong(oldPath), |
|
|
binding.rename(pathModule._makeLong(oldPath), |
|
|
pathModule._makeLong(newPath), |
|
|
pathModule._makeLong(newPath), |
|
|
makeCallback(callback)); |
|
|
callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.renameSync = function(oldPath, newPath) { |
|
|
fs.renameSync = function(oldPath, newPath) { |
|
|
|
|
|
nullCheck(oldPath); |
|
|
|
|
|
nullCheck(newPath); |
|
|
return binding.rename(pathModule._makeLong(oldPath), |
|
|
return binding.rename(pathModule._makeLong(oldPath), |
|
|
pathModule._makeLong(newPath)); |
|
|
pathModule._makeLong(newPath)); |
|
|
}; |
|
|
}; |
|
@ -543,10 +565,13 @@ fs.ftruncateSync = function(fd, len) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.rmdir = function(path, callback) { |
|
|
fs.rmdir = function(path, callback) { |
|
|
binding.rmdir(pathModule._makeLong(path), makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.rmdir(pathModule._makeLong(path), callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.rmdirSync = function(path) { |
|
|
fs.rmdirSync = function(path) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.rmdir(pathModule._makeLong(path)); |
|
|
return binding.rmdir(pathModule._makeLong(path)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -568,12 +593,15 @@ fs.fsyncSync = function(fd) { |
|
|
|
|
|
|
|
|
fs.mkdir = function(path, mode, callback) { |
|
|
fs.mkdir = function(path, mode, callback) { |
|
|
if (typeof mode === 'function') callback = mode; |
|
|
if (typeof mode === 'function') callback = mode; |
|
|
|
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
binding.mkdir(pathModule._makeLong(path), |
|
|
binding.mkdir(pathModule._makeLong(path), |
|
|
modeNum(mode, 511 /*=0777*/), |
|
|
modeNum(mode, 511 /*=0777*/), |
|
|
makeCallback(callback)); |
|
|
callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.mkdirSync = function(path, mode) { |
|
|
fs.mkdirSync = function(path, mode) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.mkdir(pathModule._makeLong(path), |
|
|
return binding.mkdir(pathModule._makeLong(path), |
|
|
modeNum(mode, 511 /*=0777*/)); |
|
|
modeNum(mode, 511 /*=0777*/)); |
|
|
}; |
|
|
}; |
|
@ -587,10 +615,13 @@ fs.sendfileSync = function(outFd, inFd, inOffset, length) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.readdir = function(path, callback) { |
|
|
fs.readdir = function(path, callback) { |
|
|
binding.readdir(pathModule._makeLong(path), makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.readdir(pathModule._makeLong(path), callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.readdirSync = function(path) { |
|
|
fs.readdirSync = function(path) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.readdir(pathModule._makeLong(path)); |
|
|
return binding.readdir(pathModule._makeLong(path)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -599,11 +630,15 @@ fs.fstat = function(fd, callback) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.lstat = function(path, callback) { |
|
|
fs.lstat = function(path, callback) { |
|
|
binding.lstat(pathModule._makeLong(path), makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.lstat(pathModule._makeLong(path), callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.stat = function(path, callback) { |
|
|
fs.stat = function(path, callback) { |
|
|
binding.stat(pathModule._makeLong(path), makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.stat(pathModule._makeLong(path), callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.fstatSync = function(fd) { |
|
|
fs.fstatSync = function(fd) { |
|
@ -611,18 +646,23 @@ fs.fstatSync = function(fd) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.lstatSync = function(path) { |
|
|
fs.lstatSync = function(path) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.lstat(pathModule._makeLong(path)); |
|
|
return binding.lstat(pathModule._makeLong(path)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.statSync = function(path) { |
|
|
fs.statSync = function(path) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.stat(pathModule._makeLong(path)); |
|
|
return binding.stat(pathModule._makeLong(path)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.readlink = function(path, callback) { |
|
|
fs.readlink = function(path, callback) { |
|
|
binding.readlink(pathModule._makeLong(path), makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.readlink(pathModule._makeLong(path), callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.readlinkSync = function(path) { |
|
|
fs.readlinkSync = function(path) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.readlink(pathModule._makeLong(path)); |
|
|
return binding.readlink(pathModule._makeLong(path)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -643,6 +683,9 @@ fs.symlink = function(destination, path, type_, callback) { |
|
|
var type = (typeof type_ === 'string' ? type_ : null); |
|
|
var type = (typeof type_ === 'string' ? type_ : null); |
|
|
var callback = makeCallback(arguments[arguments.length - 1]); |
|
|
var callback = makeCallback(arguments[arguments.length - 1]); |
|
|
|
|
|
|
|
|
|
|
|
if (!nullCheck(destination, callback)) return; |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
|
|
|
binding.symlink(preprocessSymlinkDestination(destination, type), |
|
|
binding.symlink(preprocessSymlinkDestination(destination, type), |
|
|
pathModule._makeLong(path), |
|
|
pathModule._makeLong(path), |
|
|
type, |
|
|
type, |
|
@ -652,27 +695,39 @@ fs.symlink = function(destination, path, type_, callback) { |
|
|
fs.symlinkSync = function(destination, path, type) { |
|
|
fs.symlinkSync = function(destination, path, type) { |
|
|
type = (typeof type === 'string' ? type : null); |
|
|
type = (typeof type === 'string' ? type : null); |
|
|
|
|
|
|
|
|
|
|
|
nullCheck(destination); |
|
|
|
|
|
nullCheck(path); |
|
|
|
|
|
|
|
|
return binding.symlink(preprocessSymlinkDestination(destination, type), |
|
|
return binding.symlink(preprocessSymlinkDestination(destination, type), |
|
|
pathModule._makeLong(path), |
|
|
pathModule._makeLong(path), |
|
|
type); |
|
|
type); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.link = function(srcpath, dstpath, callback) { |
|
|
fs.link = function(srcpath, dstpath, callback) { |
|
|
|
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(srcpath, callback)) return; |
|
|
|
|
|
if (!nullCheck(dstpath, callback)) return; |
|
|
|
|
|
|
|
|
binding.link(pathModule._makeLong(srcpath), |
|
|
binding.link(pathModule._makeLong(srcpath), |
|
|
pathModule._makeLong(dstpath), |
|
|
pathModule._makeLong(dstpath), |
|
|
makeCallback(callback)); |
|
|
callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.linkSync = function(srcpath, dstpath) { |
|
|
fs.linkSync = function(srcpath, dstpath) { |
|
|
|
|
|
nullCheck(srcpath); |
|
|
|
|
|
nullCheck(dstpath); |
|
|
return binding.link(pathModule._makeLong(srcpath), |
|
|
return binding.link(pathModule._makeLong(srcpath), |
|
|
pathModule._makeLong(dstpath)); |
|
|
pathModule._makeLong(dstpath)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.unlink = function(path, callback) { |
|
|
fs.unlink = function(path, callback) { |
|
|
binding.unlink(pathModule._makeLong(path), makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.unlink(pathModule._makeLong(path), callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.unlinkSync = function(path) { |
|
|
fs.unlinkSync = function(path) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.unlink(pathModule._makeLong(path)); |
|
|
return binding.unlink(pathModule._makeLong(path)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -725,12 +780,15 @@ if (constants.hasOwnProperty('O_SYMLINK')) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fs.chmod = function(path, mode, callback) { |
|
|
fs.chmod = function(path, mode, callback) { |
|
|
|
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
binding.chmod(pathModule._makeLong(path), |
|
|
binding.chmod(pathModule._makeLong(path), |
|
|
modeNum(mode), |
|
|
modeNum(mode), |
|
|
makeCallback(callback)); |
|
|
callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.chmodSync = function(path, mode) { |
|
|
fs.chmodSync = function(path, mode) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.chmod(pathModule._makeLong(path), modeNum(mode)); |
|
|
return binding.chmod(pathModule._makeLong(path), modeNum(mode)); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -761,10 +819,13 @@ fs.fchownSync = function(fd, uid, gid) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.chown = function(path, uid, gid, callback) { |
|
|
fs.chown = function(path, uid, gid, callback) { |
|
|
binding.chown(pathModule._makeLong(path), uid, gid, makeCallback(callback)); |
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
|
|
|
binding.chown(pathModule._makeLong(path), uid, gid, callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.chownSync = function(path, uid, gid) { |
|
|
fs.chownSync = function(path, uid, gid) { |
|
|
|
|
|
nullCheck(path); |
|
|
return binding.chown(pathModule._makeLong(path), uid, gid); |
|
|
return binding.chown(pathModule._makeLong(path), uid, gid); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -784,13 +845,16 @@ function toUnixTimestamp(time) { |
|
|
fs._toUnixTimestamp = toUnixTimestamp; |
|
|
fs._toUnixTimestamp = toUnixTimestamp; |
|
|
|
|
|
|
|
|
fs.utimes = function(path, atime, mtime, callback) { |
|
|
fs.utimes = function(path, atime, mtime, callback) { |
|
|
|
|
|
callback = makeCallback(callback); |
|
|
|
|
|
if (!nullCheck(path, callback)) return; |
|
|
binding.utimes(pathModule._makeLong(path), |
|
|
binding.utimes(pathModule._makeLong(path), |
|
|
toUnixTimestamp(atime), |
|
|
toUnixTimestamp(atime), |
|
|
toUnixTimestamp(mtime), |
|
|
toUnixTimestamp(mtime), |
|
|
makeCallback(callback)); |
|
|
callback); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.utimesSync = function(path, atime, mtime) { |
|
|
fs.utimesSync = function(path, atime, mtime) { |
|
|
|
|
|
nullCheck(path); |
|
|
atime = toUnixTimestamp(atime); |
|
|
atime = toUnixTimestamp(atime); |
|
|
mtime = toUnixTimestamp(mtime); |
|
|
mtime = toUnixTimestamp(mtime); |
|
|
binding.utimes(pathModule._makeLong(path), atime, mtime); |
|
|
binding.utimes(pathModule._makeLong(path), atime, mtime); |
|
@ -929,6 +993,7 @@ function FSWatcher() { |
|
|
util.inherits(FSWatcher, EventEmitter); |
|
|
util.inherits(FSWatcher, EventEmitter); |
|
|
|
|
|
|
|
|
FSWatcher.prototype.start = function(filename, persistent) { |
|
|
FSWatcher.prototype.start = function(filename, persistent) { |
|
|
|
|
|
nullCheck(filename); |
|
|
var r = this._handle.start(pathModule._makeLong(filename), persistent); |
|
|
var r = this._handle.start(pathModule._makeLong(filename), persistent); |
|
|
|
|
|
|
|
|
if (r) { |
|
|
if (r) { |
|
@ -942,6 +1007,7 @@ FSWatcher.prototype.close = function() { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.watch = function(filename) { |
|
|
fs.watch = function(filename) { |
|
|
|
|
|
nullCheck(filename); |
|
|
var watcher; |
|
|
var watcher; |
|
|
var options; |
|
|
var options; |
|
|
var listener; |
|
|
var listener; |
|
@ -996,6 +1062,7 @@ util.inherits(StatWatcher, EventEmitter); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
StatWatcher.prototype.start = function(filename, persistent, interval) { |
|
|
StatWatcher.prototype.start = function(filename, persistent, interval) { |
|
|
|
|
|
nullCheck(filename); |
|
|
this._handle.start(pathModule._makeLong(filename), persistent, interval); |
|
|
this._handle.start(pathModule._makeLong(filename), persistent, interval); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
@ -1013,6 +1080,7 @@ function inStatWatchers(filename) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fs.watchFile = function(filename) { |
|
|
fs.watchFile = function(filename) { |
|
|
|
|
|
nullCheck(filename); |
|
|
var stat; |
|
|
var stat; |
|
|
var listener; |
|
|
var listener; |
|
|
|
|
|
|
|
@ -1046,6 +1114,7 @@ fs.watchFile = function(filename) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
fs.unwatchFile = function(filename, listener) { |
|
|
fs.unwatchFile = function(filename, listener) { |
|
|
|
|
|
nullCheck(filename); |
|
|
if (!inStatWatchers(filename)) return; |
|
|
if (!inStatWatchers(filename)) return; |
|
|
|
|
|
|
|
|
var stat = statWatchers[filename]; |
|
|
var stat = statWatchers[filename]; |
|
|