Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fs: make parameters optional for readSync
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.