Showing with 38 additions and 30 deletions.
  1. +4 −19 doc/api/fs.markdown
  2. +24 −10 lib/fs.js
  3. +10 −1 test/simple/test-fs-readfile-error.js
@@ -63,26 +63,11 @@ Relative path to filename can be used, remember however that this path will be
relative to `process.cwd()`.

Most fs functions let you omit the callback argument. If you do, a default
callback is used that rethrows errors. To get a trace to the original call
site, set the NODE_DEBUG environment variable:
callback is used that ignores errors, but prints a deprecation
warning.

$ cat script.js
function bad() {
require('fs').readFile('/');
}
bad();

$ env NODE_DEBUG=fs node script.js
fs.js:66
throw err;
^
Error: EISDIR, read
at rethrow (fs.js:61:21)
at maybeCallback (fs.js:79:42)
at Object.fs.readFile (fs.js:153:18)
at bad (/path/to/script.js:2:17)
at Object.<anonymous> (/path/to/script.js:5:1)
<etc.>
**IMPORTANT**: Omitting the callback is deprecated. v0.12 will throw the
errors as exceptions.


## fs.rename(oldPath, newPath, [callback])
@@ -59,22 +59,36 @@ var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);
function rethrow() {
// Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and
// is fairly slow to generate.
var callback;
if (DEBUG) {
var backtrace = new Error;
return function(err) {
if (err) {
backtrace.message = err.message;
err = backtrace;
throw err;
}
};
callback = debugCallback;
} else
callback = missingCallback;

return callback;

function debugCallback(err) {
if (err) {
backtrace.message = err.message;
err = backtrace;
missingCallback(err);
}
}

return function(err) {
function missingCallback(err) {
if (err) {
throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
if (process.throwDeprecation)
throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
else if (!process.noDeprecation) {
var msg = 'fs: missing callback ' + (err.stack || err.message);
if (process.traceDeprecation)
console.trace(msg);
else
console.error(msg);
}
}
};
}
}

function maybeCallback(cb) {
@@ -28,7 +28,7 @@ var callbacks = 0;

function test(env, cb) {
var filename = path.join(common.fixturesDir, 'test-fs-readfile-error.js');
var execPath = process.execPath + ' ' + filename;
var execPath = process.execPath + ' --throw-deprecation ' + filename;
var options = { env: env || {} };
exec(execPath, options, function(err, stdout, stderr) {
assert(err);
@@ -53,3 +53,12 @@ test({ NODE_DEBUG: 'fs' }, function(data) {
process.on('exit', function() {
assert.equal(callbacks, 2);
});

(function() {
console.error('the warnings are normal here.');
// just make sure that this doesn't crash the process.
var fs = require('fs');
fs.readFile(__dirname);
fs.readdir(__filename);
fs.unlink('gee-i-sure-hope-this-file-isnt-important-or-existing');
})();