Skip to content

Commit 76b1863

Browse files
branishacodebytere
authored andcommitted
fs: filehandle read now accepts object as argument
PR-URL: #34180Fixes: #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>
1 parent 60874ba commit 76b1863

2 files changed

Lines changed: 34 additions & 10 deletions

File tree

‎lib/internal/fs/promises.js‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,19 @@ async function open(path, flags, mode) {
346346
flagsNumber,mode,kUsePromises));
347347
}
348348

349-
asyncfunctionread(handle,buffer,offset,length,position){
350-
validateBuffer(buffer);
349+
asyncfunctionread(handle,bufferOrOptions,offset,length,position){
350+
letbuffer=bufferOrOptions;
351+
if(!isArrayBufferView(buffer)){
352+
if(bufferOrOptions.buffer){
353+
buffer=bufferOrOptions.buffer;
354+
validateBuffer(buffer);
355+
}else{
356+
buffer=Buffer.alloc(16384);
357+
}
358+
offset=bufferOrOptions.offset||0;
359+
length=buffer.length;
360+
position=bufferOrOptions.position||null;
361+
}
351362

352363
if(offset==null){
353364
offset=0;

‎test/parallel/test-fs-promises-file-handle-read.js‎

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ const tmpdir = require('../common/tmpdir');
1313
constassert=require('assert');
1414
consttmpDir=tmpdir.path;
1515

16-
tmpdir.refresh();
16+
asyncfunctionread(fileHandle,buffer,offset,length,position){
17+
returnuseConf ?
18+
fileHandle.read({ buffer, offset, length, position }) :
19+
fileHandle.read(buffer,offset,length,position);
20+
}
1721

1822
asyncfunctionvalidateRead(){
1923
constfilePath=path.resolve(tmpDir,'tmp-read-file.txt');
@@ -23,7 +27,7 @@ async function validateRead() {
2327
constfd=fs.openSync(filePath,'w+');
2428
fs.writeSync(fd,buffer,0,buffer.length);
2529
fs.closeSync(fd);
26-
constreadAsyncHandle=awaitfileHandle.read(Buffer.alloc(11),0,11,0);
30+
constreadAsyncHandle=awaitread(fileHandle,Buffer.alloc(11),0,11,0);
2731
assert.deepStrictEqual(buffer.length,readAsyncHandle.bytesRead);
2832
assert.deepStrictEqual(buffer,readAsyncHandle.buffer);
2933

@@ -38,7 +42,7 @@ async function validateEmptyRead() {
3842
constfd=fs.openSync(filePath,'w+');
3943
fs.writeSync(fd,buffer,0,buffer.length);
4044
fs.closeSync(fd);
41-
constreadAsyncHandle=awaitfileHandle.read(Buffer.alloc(11),0,11,0);
45+
constreadAsyncHandle=awaitread(fileHandle,Buffer.alloc(11),0,11,0);
4246
assert.deepStrictEqual(buffer.length,readAsyncHandle.bytesRead);
4347

4448
awaitfileHandle.close();
@@ -51,12 +55,21 @@ async function validateLargeRead() {
5155
constfilePath=fixtures.path('x.txt');
5256
constfileHandle=awaitopen(filePath,'r');
5357
constpos=0xffffffff+1;// max-uint32 + 1
54-
constreadHandle=awaitfileHandle.read(Buffer.alloc(1),0,1,pos);
58+
constreadHandle=awaitread(fileHandle,Buffer.alloc(1),0,1,pos);
5559

5660
assert.strictEqual(readHandle.bytesRead,0);
5761
}
5862

59-
validateRead()
60-
.then(validateEmptyRead)
61-
.then(validateLargeRead)
62-
.then(common.mustCall());
63+
letuseConf=false;
64+
65+
(asyncfunction(){
66+
for(constvalueof[false,true]){
67+
tmpdir.refresh();
68+
useConf=value;
69+
70+
awaitvalidateRead()
71+
.then(validateEmptyRead)
72+
.then(validateLargeRead)
73+
.then(common.mustCall());
74+
}
75+
});

0 commit comments

Comments
 (0)