Skip to content

Commit

Permalink
fs: make parameters optional for readSync
Browse files Browse the repository at this point in the history
This makes the offset, length and position parameters optional by
passing in an options object.

PR-URL: #32460
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information
lholmquist authored and targos committed Apr 28, 2020
1 parent 7432d0a commit a100709
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
26 changes: 26 additions & 0 deletions doc/api/fs.md
Expand Up @@ -3080,6 +3080,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
Expand Down
12 changes: 12 additions & 0 deletions lib/fs.js
Expand Up @@ -525,8 +525,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);

offset |= 0;
Expand Down
27 changes: 27 additions & 0 deletions test/parallel/test-fs-readSync-optional-params.js
@@ -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 });

0 comments on commit a100709

Please sign in to comment.