mirror of https://github.com/nodejs/node.git
fs: filehandle read now accepts object as argument
PR-URL: https://github.com/nodejs/node/pull/34180 Fixes: https://github.com/nodejs/node/issues/34176 Refs: https://nodejs.org/api/fs.html#fs_filehandle_read_options Reviewed-By: Zeyu Yang <himself65@outlook.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
This commit is contained in:
parent
fb24f6e688
commit
d05c271f17
|
@ -346,8 +346,19 @@ async function open(path, flags, mode) {
|
|||
flagsNumber, mode, kUsePromises));
|
||||
}
|
||||
|
||||
async function read(handle, buffer, offset, length, position) {
|
||||
validateBuffer(buffer);
|
||||
async function read(handle, bufferOrOptions, offset, length, position) {
|
||||
let buffer = bufferOrOptions;
|
||||
if (!isArrayBufferView(buffer)) {
|
||||
if (bufferOrOptions.buffer) {
|
||||
buffer = bufferOrOptions.buffer;
|
||||
validateBuffer(buffer);
|
||||
} else {
|
||||
buffer = Buffer.alloc(16384);
|
||||
}
|
||||
offset = bufferOrOptions.offset || 0;
|
||||
length = buffer.length;
|
||||
position = bufferOrOptions.position || null;
|
||||
}
|
||||
|
||||
if (offset == null) {
|
||||
offset = 0;
|
||||
|
|
|
@ -13,7 +13,11 @@ const tmpdir = require('../common/tmpdir');
|
|||
const assert = require('assert');
|
||||
const tmpDir = tmpdir.path;
|
||||
|
||||
tmpdir.refresh();
|
||||
async function read(fileHandle, buffer, offset, length, position) {
|
||||
return useConf ?
|
||||
fileHandle.read({ buffer, offset, length, position }) :
|
||||
fileHandle.read(buffer, offset, length, position);
|
||||
}
|
||||
|
||||
async function validateRead() {
|
||||
const filePath = path.resolve(tmpDir, 'tmp-read-file.txt');
|
||||
|
@ -23,7 +27,7 @@ async function validateRead() {
|
|||
const fd = fs.openSync(filePath, 'w+');
|
||||
fs.writeSync(fd, buffer, 0, buffer.length);
|
||||
fs.closeSync(fd);
|
||||
const readAsyncHandle = await fileHandle.read(Buffer.alloc(11), 0, 11, 0);
|
||||
const readAsyncHandle = await read(fileHandle, Buffer.alloc(11), 0, 11, 0);
|
||||
assert.deepStrictEqual(buffer.length, readAsyncHandle.bytesRead);
|
||||
assert.deepStrictEqual(buffer, readAsyncHandle.buffer);
|
||||
|
||||
|
@ -38,7 +42,7 @@ async function validateEmptyRead() {
|
|||
const fd = fs.openSync(filePath, 'w+');
|
||||
fs.writeSync(fd, buffer, 0, buffer.length);
|
||||
fs.closeSync(fd);
|
||||
const readAsyncHandle = await fileHandle.read(Buffer.alloc(11), 0, 11, 0);
|
||||
const readAsyncHandle = await read(fileHandle, Buffer.alloc(11), 0, 11, 0);
|
||||
assert.deepStrictEqual(buffer.length, readAsyncHandle.bytesRead);
|
||||
|
||||
await fileHandle.close();
|
||||
|
@ -51,12 +55,21 @@ async function validateLargeRead() {
|
|||
const filePath = fixtures.path('x.txt');
|
||||
const fileHandle = await open(filePath, 'r');
|
||||
const pos = 0xffffffff + 1; // max-uint32 + 1
|
||||
const readHandle = await fileHandle.read(Buffer.alloc(1), 0, 1, pos);
|
||||
const readHandle = await read(fileHandle, Buffer.alloc(1), 0, 1, pos);
|
||||
|
||||
assert.strictEqual(readHandle.bytesRead, 0);
|
||||
}
|
||||
|
||||
validateRead()
|
||||
.then(validateEmptyRead)
|
||||
.then(validateLargeRead)
|
||||
.then(common.mustCall());
|
||||
let useConf = false;
|
||||
|
||||
(async function() {
|
||||
for (const value of [false, true]) {
|
||||
tmpdir.refresh();
|
||||
useConf = value;
|
||||
|
||||
await validateRead()
|
||||
.then(validateEmptyRead)
|
||||
.then(validateLargeRead)
|
||||
.then(common.mustCall());
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue