diff --git a/.circleci/config.yml b/.circleci/config.yml index b9e9664de9f39..ccac6da135ef7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -761,7 +761,8 @@ jobs: other.test_js_optimizer_verbose other.test_node_unhandled_rejection other.test_full_js_library* - core2.test_hello_world" + core2.test_hello_world + core2.test_fs_write_rawfs" # Run a few test with the most recent version of node # In particular we have some tests that require node flags on older # versions of node but not with the most recent version. diff --git a/src/library_fs_shared.js b/src/library_fs_shared.js index 2bd91f44bb114..47c8b313e727f 100644 --- a/src/library_fs_shared.js +++ b/src/library_fs_shared.js @@ -134,7 +134,7 @@ addToLibrary({ var fd = process.stdin.fd; try { - bytesRead = fs.readSync(fd, buf); + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); } catch(e) { // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes, // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0. diff --git a/src/library_nodefs.js b/src/library_nodefs.js index ace50458c9c43..7f5b990a88a96 100644 --- a/src/library_nodefs.js +++ b/src/library_nodefs.js @@ -276,14 +276,14 @@ addToLibrary({ // Node.js < 6 compatibility: node errors on 0 length reads if (length === 0) return 0; try { - return fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position }); + return fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position); } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } }, write(stream, buffer, offset, length, position) { try { - return fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position }); + return fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position); } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)); } diff --git a/src/library_noderawfs.js b/src/library_noderawfs.js index 8f9df71a71498..105fb312bd572 100644 --- a/src/library_noderawfs.js +++ b/src/library_noderawfs.js @@ -149,7 +149,7 @@ addToLibrary({ } var seeking = typeof position != 'undefined'; if (!seeking && stream.seekable) position = stream.position; - var bytesRead = fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position }); + var bytesRead = fs.readSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position); // update position marker when non-seeking if (!seeking) stream.position += bytesRead; return bytesRead; @@ -165,7 +165,7 @@ addToLibrary({ } var seeking = typeof position != 'undefined'; if (!seeking && stream.seekable) position = stream.position; - var bytesWritten = fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), { position: position }); + var bytesWritten = fs.writeSync(stream.nfd, new Int8Array(buffer.buffer, offset, length), 0, length, position); // update position marker when non-seeking if (!seeking) stream.position += bytesWritten; return bytesWritten; diff --git a/src/library_wasmfs_node.js b/src/library_wasmfs_node.js index 5a0303362b022..a23b4b3e2273e 100644 --- a/src/library_wasmfs_node.js +++ b/src/library_wasmfs_node.js @@ -188,7 +188,7 @@ addToLibrary({ try { // TODO: Cache open file descriptors to guarantee that opened files will // still exist when we try to access them. - let nread = fs.readSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), { position: pos }); + let nread = fs.readSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), 0, len, pos); {{{ makeSetValue('nread_p', 0, 'nread', 'i32') }}}; } catch (e) { if (!e.code) throw e; @@ -202,7 +202,7 @@ addToLibrary({ try { // TODO: Cache open file descriptors to guarantee that opened files will // still exist when we try to access them. - let nwritten = fs.writeSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), { position: pos }); + let nwritten = fs.writeSync(fd, new Int8Array(HEAPU8.buffer, buf_p, len), 0, len, pos); {{{ makeSetValue('nwritten_p', 0, 'nwritten', 'i32') }}}; } catch (e) { if (!e.code) throw e; diff --git a/test/fs/test_write.cpp b/test/fs/test_write.cpp index c0467fcfa8089..d6e0f206c7d5d 100644 --- a/test/fs/test_write.cpp +++ b/test/fs/test_write.cpp @@ -24,7 +24,7 @@ int main() var pos = lengthBytesUTF8(str); str = '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - data = new Uint8Array(100); + data = new Uint8Array(str.length+1); stringToUTF8Array(str, data, 0, lengthBytesUTF8(str)+1); FS.write(stream, data, 0, lengthBytesUTF8(str)+1, pos, /*canOwn=*/false); diff --git a/test/test_core.py b/test/test_core.py index 7eda33e4c5187..7ba98ebe21337 100644 --- a/test/test_core.py +++ b/test/test_core.py @@ -5822,6 +5822,7 @@ def test_fs_js_api(self): self.set_setting("FORCE_FILESYSTEM") self.do_runf('fs/test_fs_js_api.c', 'success') + @also_with_noderawfs def test_fs_write(self): if self.get_setting('WASMFS'): self.set_setting("FORCE_FILESYSTEM") diff --git a/third_party/closure-compiler/node-externs/fs.js b/third_party/closure-compiler/node-externs/fs.js index 4e7e95831fc7b..fc9cce32fa8f9 100644 --- a/third_party/closure-compiler/node-externs/fs.js +++ b/third_party/closure-compiler/node-externs/fs.js @@ -373,10 +373,12 @@ fs.write = function(fd, buffer, offset, length, position, callback) {}; /** * @param {*} fd * @param {*} buffer - * @param {Object.=} options + * @param {number=} offset + * @param {number=} length + * @param {number=} position * @return {number} */ -fs.writeSync = function(fd, buffer, options) {}; +fs.writeSync = function(fd, buffer, offset, length, position) {}; /** * @param {*} fd @@ -391,11 +393,13 @@ fs.read = function(fd, buffer, offset, length, position, callback) {}; /** * @param {*} fd * @param {*} buffer - * @param {Object.=} options + * @param {number} offset + * @param {number} length + * @param {number=} position * @return {number} * @nosideeffects */ -fs.readSync = function(fd, buffer, options) {}; +fs.readSync = function(fd, buffer, offset, length, position) {}; /** * @param {string} filename