mirror of https://github.com/nodejs/node.git
fs: properly handle fd passed to truncate()
Currently, fs.truncate() silently fails when a file descriptor is passed as the first argument. This commit changes this behavior to properly call fs.ftruncate(). PR-URL: https://github.com/joyent/node/pull/9161 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Timothy J Fontaine <tjfontaine@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Conflicts: lib/fs.jspull/916/head
parent
4fcbb8aaaf
commit
c82e580a50
|
@ -106,7 +106,8 @@ Synchronous ftruncate(2).
|
|||
## fs.truncate(path, len, callback)
|
||||
|
||||
Asynchronous truncate(2). No arguments other than a possible exception are
|
||||
given to the completion callback.
|
||||
given to the completion callback. A file descriptor can also be passed as the
|
||||
first argument. In this case, `fs.ftruncate()` is called.
|
||||
|
||||
## fs.truncateSync(path, len)
|
||||
|
||||
|
|
|
@ -679,9 +679,7 @@ fs.renameSync = function(oldPath, newPath) {
|
|||
|
||||
fs.truncate = function(path, len, callback) {
|
||||
if (typeof path === 'number') {
|
||||
var req = new FSReqWrap();
|
||||
req.oncomplete = callback;
|
||||
return fs.ftruncate(path, len, req);
|
||||
return fs.ftruncate(path, len, callback);
|
||||
}
|
||||
if (typeof len === 'function') {
|
||||
callback = len;
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var tmp = common.tmpDir;
|
||||
if (!fs.existsSync(tmp))
|
||||
fs.mkdirSync(tmp);
|
||||
var filename = path.resolve(tmp, 'truncate-file.txt');
|
||||
|
||||
var success = 0;
|
||||
|
||||
fs.writeFileSync(filename, 'hello world', 'utf8');
|
||||
var fd = fs.openSync(filename, 'r+');
|
||||
fs.truncate(fd, 5, function(err) {
|
||||
assert.ok(!err);
|
||||
assert.equal(fs.readFileSync(filename, 'utf8'), 'hello');
|
||||
success++;
|
||||
});
|
||||
|
||||
process.on('exit', function() {
|
||||
fs.closeSync(fd);
|
||||
fs.unlinkSync(filename);
|
||||
assert.equal(success, 1);
|
||||
console.log('ok');
|
||||
});
|
Loading…
Reference in New Issue