fs: fix cb/sync writev empty array behavior
PR-URL: https://github.com/nodejs/node/pull/41932 Refs: https://github.com/nodejs/node/issues/41910 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
98cbbbb9b0
commit
aff8b874e3
@ -906,6 +906,11 @@ function writev(fd, buffers, position, callback) {
|
||||
validateBufferArray(buffers);
|
||||
callback = maybeCallback(callback || position);
|
||||
|
||||
if (buffers.length === 0) {
|
||||
process.nextTick(callback, null, 0, buffers);
|
||||
return;
|
||||
}
|
||||
|
||||
const req = new FSReqCallback();
|
||||
req.oncomplete = wrapper;
|
||||
|
||||
@ -932,6 +937,10 @@ function writevSync(fd, buffers, position) {
|
||||
fd = getValidatedFd(fd);
|
||||
validateBufferArray(buffers);
|
||||
|
||||
if (buffers.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const ctx = {};
|
||||
|
||||
if (typeof position !== 'number')
|
||||
|
@ -56,11 +56,21 @@ const getFileName = (i) => path.join(tmpdir.path, `writev_sync_${i}.txt`);
|
||||
assert(Buffer.concat(bufferArr).equals(fs.readFileSync(filename)));
|
||||
}
|
||||
|
||||
// fs.writevSync with empty array of buffers
|
||||
{
|
||||
const filename = getFileName(3);
|
||||
const fd = fs.openSync(filename, 'w');
|
||||
const written = fs.writevSync(fd, []);
|
||||
assert.strictEqual(written, 0);
|
||||
fs.closeSync(fd);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Testing with wrong input types
|
||||
*/
|
||||
{
|
||||
const filename = getFileName(3);
|
||||
const filename = getFileName(4);
|
||||
const fd = fs.openSync(filename, 'w');
|
||||
|
||||
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {
|
||||
|
@ -57,11 +57,30 @@ const getFileName = (i) => path.join(tmpdir.path, `writev_${i}.txt`);
|
||||
fs.writev(fd, bufferArr, done);
|
||||
}
|
||||
|
||||
|
||||
// fs.writev with empty array of buffers
|
||||
{
|
||||
const filename = getFileName(3);
|
||||
const fd = fs.openSync(filename, 'w');
|
||||
const bufferArr = [];
|
||||
let afterSyncCall = false;
|
||||
|
||||
const done = common.mustSucceed((written, buffers) => {
|
||||
assert.strictEqual(buffers.length, 0);
|
||||
assert.strictEqual(written, 0);
|
||||
assert(afterSyncCall);
|
||||
fs.closeSync(fd);
|
||||
});
|
||||
|
||||
fs.writev(fd, bufferArr, done);
|
||||
afterSyncCall = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Testing with wrong input types
|
||||
*/
|
||||
{
|
||||
const filename = getFileName(3);
|
||||
const filename = getFileName(4);
|
||||
const fd = fs.openSync(filename, 'w');
|
||||
|
||||
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user