Skip to content

Commit 16fd432

Browse files
authored
Ensure compatibility with older versions of Node.js (#21863)
The previous `fs.writeSync` API was not available in Node.js 17.x, see: https://nodejs.org/api/fs.html#fswritesyncfd-buffer-options Also, do the same for `fs.readSync` to ensure compat with Node.js < v13.13.0. Resolves #21118.
1 parent f5e9ebd commit 16fd432

File tree

8 files changed

+19
-13
lines changed

8 files changed

+19
-13
lines changed

.circleci/config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,8 @@ jobs:
761761
other.test_js_optimizer_verbose
762762
other.test_node_unhandled_rejection
763763
other.test_full_js_library*
764-
core2.test_hello_world"
764+
core2.test_hello_world
765+
core2.test_fs_write_rawfs"
765766
# Run a few test with the most recent version of node
766767
# In particular we have some tests that require node flags on older
767768
# versions of node but not with the most recent version.

src/library_fs_shared.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ addToLibrary({
134134
var fd = process.stdin.fd;
135135

136136
try {
137-
bytesRead = fs.readSync(fd, buf);
137+
bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);
138138
} catch(e) {
139139
// Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes,
140140
// reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0.

src/library_nodefs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,14 +276,14 @@ addToLibrary({
276276
// Node.js < 6 compatibility: node errors on 0 length reads
277277
if (length === 0) return 0;
278278
try {
279-
return fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position });
279+
return fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
280280
} catch (e) {
281281
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
282282
}
283283
},
284284
write(stream, buffer, offset, length, position) {
285285
try {
286-
return fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position });
286+
return fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
287287
} catch (e) {
288288
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
289289
}

src/library_noderawfs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ addToLibrary({
149149
}
150150
var seeking = typeof position != 'undefined';
151151
if (!seeking && stream.seekable) position = stream.position;
152-
var bytesRead = fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position });
152+
var bytesRead = fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
153153
// update position marker when non-seeking
154154
if (!seeking) stream.position += bytesRead;
155155
return bytesRead;
@@ -165,7 +165,7 @@ addToLibrary({
165165
}
166166
var seeking = typeof position != 'undefined';
167167
if (!seeking && stream.seekable) position = stream.position;
168-
var bytesWritten = fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position });
168+
var bytesWritten = fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position);
169169
// update position marker when non-seeking
170170
if (!seeking) stream.position += bytesWritten;
171171
return bytesWritten;

src/library_wasmfs_node.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ addToLibrary({
188188
try {
189189
// TODO: Cache open file descriptors to guarantee that opened files will
190190
// still exist when we try to access them.
191-
let nread = fs.readSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), { position: pos });
191+
let nread = fs.readSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), 0, len, pos);
192192
{{{ makeSetValue('nread_p', 0, 'nread', 'i32') }}};
193193
} catch (e) {
194194
if (!e.code) throw e;
@@ -202,7 +202,7 @@ addToLibrary({
202202
try {
203203
// TODO: Cache open file descriptors to guarantee that opened files will
204204
// still exist when we try to access them.
205-
let nwritten = fs.writeSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), { position: pos });
205+
let nwritten = fs.writeSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), 0, len, pos);
206206
{{{ makeSetValue('nwritten_p', 0, 'nwritten', 'i32') }}};
207207
} catch (e) {
208208
if (!e.code) throw e;

test/fs/test_write.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ int main()
2424
var pos = lengthBytesUTF8(str);
2525

2626
str = '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
27-
data = new Uint8Array(100);
27+
data = new Uint8Array(str.length+1);
2828
stringToUTF8Array(str, data, 0, lengthBytesUTF8(str)+1);
2929
FS.write(stream, data, 0, lengthBytesUTF8(str)+1, pos, /*canOwn=*/false);
3030

test/test_core.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5822,6 +5822,7 @@ def test_fs_js_api(self):
58225822
self.set_setting("FORCE_FILESYSTEM")
58235823
self.do_runf('fs/test_fs_js_api.c', 'success')
58245824

5825+
@also_with_noderawfs
58255826
def test_fs_write(self):
58265827
if self.get_setting('WASMFS'):
58275828
self.set_setting("FORCE_FILESYSTEM")

third_party/closure-compiler/node-externs/fs.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,10 +373,12 @@ fs.write = function(fd, buffer, offset, length, position, callback) {};
373373
/**
374374
* @param {*} fd
375375
* @param {*} buffer
376-
* @param {Object.<string,number>=} options
376+
* @param {number=} offset
377+
* @param {number=} length
378+
* @param {number=} position
377379
* @return {number}
378380
*/
379-
fs.writeSync = function(fd, buffer, options) {};
381+
fs.writeSync = function(fd, buffer, offset, length, position) {};
380382

381383
/**
382384
* @param {*} fd
@@ -391,11 +393,13 @@ fs.read = function(fd, buffer, offset, length, position, callback) {};
391393
/**
392394
* @param {*} fd
393395
* @param {*} buffer
394-
* @param {Object.<string,number>=} options
396+
* @param {number} offset
397+
* @param {number} length
398+
* @param {number=} position
395399
* @return {number}
396400
* @nosideeffects
397401
*/
398-
fs.readSync = function(fd, buffer, options) {};
402+
fs.readSync = function(fd, buffer, offset, length, position) {};
399403

400404
/**
401405
* @param {string} filename

0 commit comments

Comments
 (0)