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);
|
validateBufferArray(buffers);
|
||||||
callback = maybeCallback(callback || position);
|
callback = maybeCallback(callback || position);
|
||||||
|
|
||||||
|
if (buffers.length === 0) {
|
||||||
|
process.nextTick(callback, null, 0, buffers);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const req = new FSReqCallback();
|
const req = new FSReqCallback();
|
||||||
req.oncomplete = wrapper;
|
req.oncomplete = wrapper;
|
||||||
|
|
||||||
@ -932,6 +937,10 @@ function writevSync(fd, buffers, position) {
|
|||||||
fd = getValidatedFd(fd);
|
fd = getValidatedFd(fd);
|
||||||
validateBufferArray(buffers);
|
validateBufferArray(buffers);
|
||||||
|
|
||||||
|
if (buffers.length === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const ctx = {};
|
const ctx = {};
|
||||||
|
|
||||||
if (typeof position !== 'number')
|
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)));
|
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
|
* Testing with wrong input types
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
const filename = getFileName(3);
|
const filename = getFileName(4);
|
||||||
const fd = fs.openSync(filename, 'w');
|
const fd = fs.openSync(filename, 'w');
|
||||||
|
|
||||||
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {
|
[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(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
|
* Testing with wrong input types
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
const filename = getFileName(3);
|
const filename = getFileName(4);
|
||||||
const fd = fs.openSync(filename, 'w');
|
const fd = fs.openSync(filename, 'w');
|
||||||
|
|
||||||
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {
|
[false, 'test', {}, [{}], ['sdf'], null, undefined].forEach((i) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user