fs: make parameters optional for readSync

This makes the offset, length and position parameters optional by
passing in an options object.

PR-URL: https://github.com/nodejs/node/pull/32460
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Lucas Holmquist 2020-03-24 11:23:33 -04:00 committed by Anna Henningsen
parent 05da0bbadc
commit 88b4e86fd7
No known key found for this signature in database
GPG Key ID: A94130F0BFC8EBE9
3 changed files with 65 additions and 0 deletions

View File

@ -3069,6 +3069,32 @@ Returns the number of `bytesRead`.
For detailed information, see the documentation of the asynchronous version of
this API: [`fs.read()`][].
## `fs.readSync(fd, buffer, [options])`
<!-- YAML
added: REPLACEME
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/32460
description: Options object can be passed in
to make offset, length and position optional
-->
* `fd` {integer}
* `buffer` {Buffer|TypedArray|DataView}
* `options` {Object}
* `offset` {integer} **Default:** `0`
* `length` {integer} **Default:** `buffer.length`
* `position` {integer} **Default:** `null`
* Returns: {number}
Returns the number of `bytesRead`.
Similar to the above `fs.readSync` function, this version takes an optional `options` object.
If no `options` object is specified, it will default with the above values.
For detailed information, see the documentation of the asynchronous version of
this API: [`fs.read()`][].
## `fs.readv(fd, buffers[, position], callback)`
<!-- YAML
added: REPLACEME

View File

@ -533,8 +533,20 @@ function read(fd, buffer, offset, length, position, callback) {
ObjectDefineProperty(read, internalUtil.customPromisifyArgs,
{ value: ['bytesRead', 'buffer'], enumerable: false });
// usage:
// fs.readSync(fd, buffer, offset, length, position);
// OR
// fs.readSync(fd, buffer, {}) or fs.readSync(fd, buffer)
function readSync(fd, buffer, offset, length, position) {
validateInt32(fd, 'fd', 0);
if (arguments.length <= 3) {
// Assume fs.read(fd, buffer, options)
const options = offset || {};
({ offset = 0, length = buffer.length, position } = options);
}
validateBuffer(buffer);
if (offset == null) {

View File

@ -0,0 +1,27 @@
'use strict';
require('../common');
const fixtures = require('../common/fixtures');
const fs = require('fs');
const assert = require('assert');
const filepath = fixtures.path('x.txt');
const fd = fs.openSync(filepath, 'r');
const expected = Buffer.from('xyz\n');
function runTest(defaultBuffer, options) {
const result = fs.readSync(fd, defaultBuffer, options);
assert.strictEqual(result, expected.length);
assert.deepStrictEqual(defaultBuffer, expected);
}
// Test passing in an empty options object
runTest(Buffer.allocUnsafe(expected.length), { position: 0 });
// Test not passing in any options object
runTest(Buffer.allocUnsafe(expected.length));
// Test passing in options
runTest(Buffer.allocUnsafe(expected.length), { offset: 0,
length: expected.length,
position: 0 });