From eca7c1732ea3f1068a4b4dd15c954d069de610b2 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Fri, 23 Oct 2026 10:36:35 +0200 Subject: [PATCH] feat: enabled cross-origin storage emscripten build for bundler-friendly build --- Dockerfile | 2 +- scripts/build-sqlite3-wasm.sh | 52 +- src/bin/sqlite3-bundler-friendly.mjs | 899 ++++++++++++++++----------- src/bin/sqlite3-node.mjs | 868 ++++++++++++++------------ src/bin/sqlite3.mjs | 834 ++++++++++++++----------- src/bin/sqlite3.wasm | Bin 879084 -> 892281 bytes tsdown.config.ts | 4 +- 7 files changed, 1547 insertions(+), 1112 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad2c48a..1d30f10 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -ARG EMSDK_VERSION=5.0.5 +ARG EMSDK_VERSION=6.0.13 FROM emscripten/emsdk:${EMSDK_VERSION} AS wasm-tools # The SDK already supplies the build dependencies. SQLite's release build diff --git a/scripts/build-sqlite3-wasm.sh b/scripts/build-sqlite3-wasm.sh index 968245d..227d043 100644 --- a/scripts/build-sqlite3-wasm.sh +++ b/scripts/build-sqlite3-wasm.sh @@ -106,8 +106,56 @@ make sqlite3.c cd ext/wasm -log "Running make -j4 npm (ext/wasm)" -make -j4 npm +# SQLite invokes wasm-opt with --all-features. Newer Binaryen versions then +# emit compact imports, which are not supported by our browser/Node targets. +# Append the compatibility flag after SQLite's flags, preserving its passes. +WASM_OPT_WRAPPER="$(mktemp /tmp/sqlite-wasm-opt.XXXXXX)" +printf '#!/usr/bin/env bash\nexec %q "$@" --disable-compact-imports\n' \ + "$(command -v wasm-opt)" > "$WASM_OPT_WRAPPER" +chmod +x "$WASM_OPT_WRAPPER" + +log "Running make -j4 npm with Cross-Origin Storage for the bundler-friendly browser loader" +make -j4 npm 'emcc.flags.bundler=-sCROSS_ORIGIN_STORAGE' "bin.wasm-opt=$WASM_OPT_WRAPPER" + +# SQLite strips the Wasm after emcc embeds its hash. Update only the COS +# loader's hash to describe the final, shared binary before packaging it. +log "Updating and verifying the COS hash after Wasm post-processing" +python3 - <<'PY' +import hashlib +from pathlib import Path +import re +import zipfile + +wasm = Path('jswasm/sqlite3.wasm') +loader = Path('jswasm/sqlite3-bundler-friendly.mjs') +digest = hashlib.sha256(wasm.read_bytes()).hexdigest() +pattern = re.compile( + r"(Module\['wasmHash'\]\s*=\s*\{\s*algorithm:\s*'SHA-256',\s*value:\s*')" + r"[0-9a-f]{64}('\s*\})" +) +source, count = pattern.subn(lambda match: match[1] + digest + match[2], loader.read_text()) +if count != 1: + raise SystemExit(f'Expected exactly one COS hash in {loader}, found {count}') +loader.write_text(source) + +# The npm target has already created the archive. Replace its loader so the +# extracted artifacts and archived binary have the same verified hash. +with zipfile.ZipFile('npm-bundle.zip') as archive: + entries = [(info, archive.read(info)) for info in archive.infolist()] +with zipfile.ZipFile('npm-bundle.zip', 'w') as archive: + for info, data in entries: + if info.filename == loader.as_posix(): + data = loader.read_bytes() + archive.writestr(info, data) +with zipfile.ZipFile('npm-bundle.zip') as archive: + packaged_loader = archive.read(loader.as_posix()).decode() + packaged_digest = hashlib.sha256(archive.read(wasm.as_posix())).hexdigest() + if packaged_digest != digest or not pattern.search(packaged_loader): + raise SystemExit('Packaged COS loader or Wasm hash verification failed') + if pattern.search(packaged_loader)[0] != pattern.search(source)[0]: + raise SystemExit('Packaged COS hash differs from the final Wasm hash') +print(f'COS SHA-256: {digest}') +PY # ensure artifact exists if [ ! -f npm-bundle.zip ]; then diff --git a/src/bin/sqlite3-bundler-friendly.mjs b/src/bin/sqlite3-bundler-friendly.mjs index c55b1ed..b8656d4 100644 --- a/src/bin/sqlite3-bundler-friendly.mjs +++ b/src/bin/sqlite3-bundler-friendly.mjs @@ -31,7 +31,7 @@ ** SQLITE_VERSION_NUMBER 3054001 ** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Emscripten SDK: 5.0.5 +** Emscripten SDK: 6.0.13 */ // This code implements the `-sMODULARIZE` settings by taking the generated // JS program code (INNER_JS_CODE) and wrapping it in a factory function. @@ -39,8 +39,7 @@ // When targeting node and ES6 we use `await import ..` in the generated code // so the outer function needs to be marked as async. async function sqlite3InitModule(moduleArg = {}) { - var moduleRtn; - + var Module = moduleArg; // include: shell.js // include: minimum_runtime_check.js // end include: minimum_runtime_check.js @@ -57,7 +56,6 @@ async function sqlite3InitModule(moduleArg = {}) { // after the generated code, you will need to define var Module = {}; // before the code. Then that object will be used in the code, and you // can continue to use Module afterwards as well. -var Module = moduleArg; // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). @@ -98,7 +96,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR // end include: ./bld/pre-js.bundler.js -var arguments_ = []; +var programArgs = []; var thisProgram = './this.program'; var quit_ = (status, toThrow) => { throw toThrow; @@ -208,8 +206,6 @@ function assert(condition, text) { var isFileURI = (filename) => filename.startsWith('file://'); // include: runtime_common.js -// include: runtime_stack_check.js -// end include: runtime_stack_check.js // include: runtime_exceptions.js // Base Emscripten EH error class class EmscriptenEH {} @@ -219,34 +215,39 @@ class EmscriptenSjLj extends EmscriptenEH {} // end include: runtime_exceptions.js // include: runtime_debug.js // end include: runtime_debug.js -var readyPromiseResolve, readyPromiseReject; - // Memory management var runtimeInitialized = false; +// When ALLOW_MEMORY_GROWTH is enabled, the conversion from Wasm +// memory to ArrayBuffer requires some additional logic. +function getMemoryBuffer() { + return wasmMemory.buffer; +} + function updateMemoryViews() { - var b = wasmMemory.buffer; + // If we already have a heap that is resizeable/growable buffer we don't + // need to do anything in updateMemoryViews. + if (HEAP8?.buffer?.resizable) return; + var b = getMemoryBuffer(); HEAP8 = new Int8Array(b); HEAP16 = new Int16Array(b); HEAPU8 = new Uint8Array(b); - HEAPU16 = new Uint16Array(b); + HEAP32 = new Int32Array(b); HEAPU32 = new Uint32Array(b); HEAPF32 = new Float32Array(b); HEAPF64 = new Float64Array(b); HEAP64 = new BigInt64Array(b); - HEAPU64 = new BigUint64Array(b); + } // In non-standalone/normal mode, we create the memory here. // include: runtime_init_memory.js // Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined) -// check for full engine support (use string 'subarray' to avoid closure compiler confusion) - function initMemory() { @@ -278,11 +279,10 @@ function initMemory() { // end include: memoryprofiler.js // end include: runtime_common.js function preRun() { - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } + var preRun = Module['preRun']; + if (preRun) { + if (typeof preRun === 'function') preRun = [preRun]; + onPreRuns.push(...preRun); } // Begin ATPRERUNS hooks callRuntimeCallbacks(onPreRuns); @@ -302,16 +302,15 @@ TTY.init(); // Begin ATPOSTCTORS hooks FS.ignorePermissions = false; // End ATPOSTCTORS hooks + } function postRun() { - // PThreads reuse the runtime from the main thread. - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } + var postRun = Module['postRun']; + if (postRun) { + if (typeof postRun === 'function') postRun = [postRun]; + onPostRuns.push(...postRun); } // Begin ATPOSTRUNS hooks @@ -321,7 +320,6 @@ function postRun() { /** * @param {string|number=} what - * @noreturn */ function abort(what) { Module['onAbort']?.(what); @@ -343,19 +341,7 @@ function abort(what) { // a trap or not based on a hidden field within the object. So at the moment // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that // allows this in the wasm spec. - - // Suppress closure compiler warning here. Closure compiler's builtin extern - // definition for WebAssembly.RuntimeError claims it takes no arguments even - // though it can. - // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. - /** @suppress {checkTypes} */ - var e = new WebAssembly.RuntimeError(what); - - readyPromiseReject?.(e); - // Throw the error whether or not MODULARIZE is set because abort is used - // in code paths apart from instantiation where an exception is expected - // to be thrown when abort is called. - throw e; + throw new WebAssembly.RuntimeError(what); } var wasmBinaryFile; @@ -372,9 +358,6 @@ function findWasmBinary() { } function getBinarySync(file) { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } if (readBinary) { return readBinary(file); } @@ -411,7 +394,68 @@ async function instantiateArrayBuffer(binaryFile, imports) { } } +// Stream Wasm bytes into the compiler. A fixed `application/wasm` type is +// used rather than any server-supplied MIME type: on a cache hit the bytes +// were hash-verified when written into COS, and on a cache miss the store +// branch is already consuming the body, so the standard path's re-download +// fallback for a bad MIME type is not available. A wrong file still fails +// compilation and falls through to the standard path. +function cosInstantiateStream(stream, imports) { + var response = new Response(stream, { headers: { 'Content-Type': 'application/wasm' } }); + return WebAssembly.instantiateStreaming(response, imports); +} + async function instantiateAsync(binary, binaryFile, imports) { + // Cross-Origin Storage (COS) progressive enhancement. + // https://github.com/WICG/cross-origin-storage + // Any error (not found, not allowed, network failure, …) falls through + // to the standard Emscripten streaming path so the page always loads. + if (globalThis.navigator?.crossOriginStorage?.getFileHandle) { + var cosHash = Module['wasmHash']; + try { + var cosHandle = await navigator.crossOriginStorage.getFileHandle(cosHash); + // Cache hit. getFile() resolves to a lazy File reference; no bytes are + // read until the stream is consumed by the compiler below. + var cosFile = await cosHandle.getFile(); + return cosInstantiateStream(cosFile.stream(), imports); + } catch { + // Any error (not found, not allowed, …) — fetch from the network and + // attempt to store in COS for future page loads. + try { + var networkResponse = await fetch(binaryFile, { credentials: 'same-origin' }); + if (!networkResponse.ok) { + throw new Error(`HTTP ${networkResponse.status}`); + } + // Split the body so that one branch feeds streaming compilation while + // the other is written into COS in the background. This keeps the + // download/compile overlap of the standard instantiateStreaming() + // path instead of waiting for the whole file to arrive first. + var [compileStream, storeStream] = networkResponse.body.tee(); + // Fire-and-forget store; never block instantiation on the write. + // pipeTo() closes the writable, and COS verifies the hash on close. + (async () => { + try { + var writeHandle = await navigator.crossOriginStorage.getFileHandle( + cosHash, + { create: true, origins: '*' }, + ); + var writable = await writeHandle.createWritable(); + await storeStream.pipeTo(writable); + } catch (storeErr) { + err(`COS store failed: ${storeErr}`); + // Release the tee branch so the body is not buffered indefinitely + // on behalf of a writer that will never consume it. + storeStream.cancel().catch(() => {}); + } + })(); + return cosInstantiateStream(compileStream, imports); + } catch (fetchErr) { + // Network fetch failed; fall through to the standard path below. + err(`COS fallback fetch failed: ${fetchErr}`); + } + // Fall through to the standard streaming path below. + } + } if (!binary ) { try { @@ -444,8 +488,7 @@ async function createWasm() { // Load the wasm module and create an instance of using native support in the JS engine. // handle a generated wasm instance, receiving its exports and // performing other necessary setup - /** @param {WebAssembly.Module=} module*/ - function receiveInstance(instance, module) { + function receiveInstance(instance) { wasmExports = instance.exports; assignWasmExports(wasmExports); @@ -464,17 +507,20 @@ async function createWasm() { var info = getWasmImports(); + // Expose the build-time hash so that custom Module['instantiateWasm'] + // callbacks can implement their own COS-aware loading path. + Module['wasmHash'] = { algorithm: 'SHA-256', value: 'ceb5f93d05868430e1eabb2633ea1c1aceb2bf4e6e0ad1d82e3244e437310843' }; + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback // to manually instantiate the Wasm module themselves. This allows pages to // run the instantiation parallel to any other async startup actions they are // performing. // Also pthreads and wasm workers initialize the wasm instance through this // path. - if (Module['instantiateWasm']) { - return new Promise((resolve, reject) => { - Module['instantiateWasm'](info, (inst, mod) => { - resolve(receiveInstance(inst, mod)); - }); + var instantiateWasm = Module['instantiateWasm']; + if (instantiateWasm) { + return new Promise((resolve) => { + instantiateWasm(info, (inst) => resolve(receiveInstance(inst))); }); } @@ -497,36 +543,9 @@ async function createWasm() { } } - /** @type {!Int16Array} */ - var HEAP16; - - /** @type {!Int32Array} */ - var HEAP32; - - /** not-@type {!BigInt64Array} */ - var HEAP64; - /** @type {!Int8Array} */ var HEAP8; - /** @type {!Float32Array} */ - var HEAPF32; - - /** @type {!Float64Array} */ - var HEAPF64; - - /** @type {!Uint16Array} */ - var HEAPU16; - - /** @type {!Uint32Array} */ - var HEAPU32; - - /** not-@type {!BigUint64Array} */ - var HEAPU64; - - /** @type {!Uint8Array} */ - var HEAPU8; - var callRuntimeCallbacks = (callbacks) => { while (callbacks.length > 0) { // Pass the module as the first argument. @@ -540,49 +559,8 @@ async function createWasm() { var addOnPreRun = (cb) => onPreRuns.push(cb); - - /** - * @param {number} ptr - * @param {string} type - */ - function getValue(ptr, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': return HEAP8[ptr]; - case 'i8': return HEAP8[ptr]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP64[((ptr)>>3)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - case '*': return HEAPU32[((ptr)>>2)]; - default: abort(`invalid type for getValue: ${type}`); - } - } - var noExitRuntime = true; - - /** - * @param {number} ptr - * @param {number} value - * @param {string} type - */ - function setValue(ptr, value, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': HEAP8[ptr] = value; break; - case 'i8': HEAP8[ptr] = value; break; - case 'i16': HEAP16[((ptr)>>1)] = value; break; - case 'i32': HEAP32[((ptr)>>2)] = value; break; - case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; - case 'float': HEAPF32[((ptr)>>2)] = value; break; - case 'double': HEAPF64[((ptr)>>3)] = value; break; - case '*': HEAPU32[((ptr)>>2)] = value; break; - default: abort(`invalid type for setValue: ${type}`); - } - } - var stackRestore = (val) => __emscripten_stack_restore(val); var stackSave = () => _emscripten_stack_get_current(); @@ -665,7 +643,7 @@ resolve:(...args) => { for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? args[i] : FS.cwd(); // Skip empty and invalid entries - if (typeof path != 'string') { + if (typeof path !== 'string') { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { return ''; // an invalid portion invalidates the whole thing @@ -715,18 +693,26 @@ relative:(from, to) => { var UTF8Decoder = new TextDecoder(); -var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { - var maxIdx = idx + maxBytesToRead; - if (ignoreNul) return maxIdx; - // TextDecoder needs to know the byte length in advance, it doesn't stop on - // null terminator by itself. - // As a tiny code save trick, compare idx against maxIdx using a negation, - // so that maxBytesToRead=undefined/NaN means Infinity. - while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; - return idx; - }; /** + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @param {boolean=} ignoreNul + * @return {number} + */ + var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + var maxIdx = idx + maxBytesToRead; + if (ignoreNul) return maxIdx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. + // As a tiny code save trick, compare idx against maxIdx using a negation, + // so that maxBytesToRead=undefined/NaN means Infinity. + while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; + return idx; + }; + + /** * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given * array that contains uint8 values, returns a copy of that string as a * Javascript String object. @@ -887,12 +873,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; bytesRead++; buffer[offset+i] = result; + // We currently only support canonical mode (ICANON), where + // read(2) returns as soon as a line delimiter is read. + if (result === 10) break; } if (bytesRead) { stream.node.atime = Date.now(); @@ -975,6 +964,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; + /** @type {!Uint8Array} */ + var HEAPU8; var zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size); var alignMemory = (size, alignment) => { @@ -986,12 +977,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (ptr) zeroMemory(ptr, size); return ptr; }; + var MEMFS = { ops_table:null, mount(mount) { return MEMFS.createNode(null, '/', 16895, 0); }, - createNode(parent, name, mode, dev) { + createNode(parent, name, mode, dev = undefined) { if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { // not supported throw new FS.ErrnoError(63); @@ -1084,7 +1076,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // For small filesizes (<1MB), perform size*2 geometric increase, but for // large sizes, do a much more conservative size*1.125 increase to avoid // overshooting the allocation cap by a very large margin. - var CAPACITY_DOUBLING_MAX = 1024 * 1024; + const CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); if (prevCapacity) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. var oldContents = MEMFS.getFileDataAsTypedArray(node); @@ -1128,7 +1120,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return attr; }, setattr(node, attr) { - for (const key of ["mode", "atime", "mtime", "ctime"]) { + for (const key of ['mode', 'atime', 'mtime', 'ctime']) { if (attr[key] != null) { node[key] = attr[key]; } @@ -1147,7 +1139,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } throw MEMFS.doesNotExistError; }, - mknod(parent, name, mode, dev) { + mknod(parent, name, mode, dev = undefined) { return MEMFS.createNode(parent, name, mode, dev); }, rename(old_node, new_dir, new_name) { @@ -1155,14 +1147,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { new_node = FS.lookupNode(new_dir, new_name); } catch (e) {} - if (new_node) { - if (FS.isDir(old_node.mode)) { - // if we're overwriting a directory at new_name, make sure it's empty. - for (var i in new_node.contents) { - throw new FS.ErrnoError(55); - } + if (new_node && FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); } - FS.hashRemoveNode(new_node); } // do the internal rewiring delete old_node.parent.contents[old_node.name]; @@ -1221,7 +1210,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (canOwn) { node.contents = buffer.subarray(offset, offset + length); node.usedBytes = length; - } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + } else if (!node.usedBytes && !position) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. node.contents = buffer.slice(offset, offset + length); node.usedBytes = length; } else { @@ -1288,7 +1277,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; var FS_modeStringToFlags = (str) => { - if (typeof str != 'string') return str; + if (typeof str !== 'string') return str; var flagModes = { 'r': 0, 'r+': 2, @@ -1298,14 +1287,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { 'a+': 1024 | 64 | 2, }; var flags = flagModes[str]; - if (typeof flags == 'undefined') { + if (typeof flags === 'undefined') { throw new Error(`Unknown file open mode: ${str}`); } return flags; }; var FS_fileDataToTypedArray = (data) => { - if (typeof data == 'string') { + if (typeof data === 'string') { data = intArrayFromString(data, true); } if (!data.subarray) { @@ -1334,24 +1323,27 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return id; }; + var dependenciesPromise = null; + var resolveRunDependencies = async () => dependenciesPromise; var runDependencies = 0; - var dependenciesFulfilled = null; + var dependenciesPromiseResolve = null; var removeRunDependency = (id) => { runDependencies--; Module['monitorRunDependencies']?.(runDependencies); - if (runDependencies == 0) { - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } + if (!runDependencies) { + dependenciesPromiseResolve(); } }; + + var addRunDependency = (id) => { + if (!runDependencies) { + dependenciesPromise = new Promise((resolve) => dependenciesPromiseResolve = resolve); + } runDependencies++; Module['monitorRunDependencies']?.(runDependencies); @@ -1362,7 +1354,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var preloadPlugins = []; var FS_handledByPreloadPlugin = async (byteArray, fullname) => { // Ensure plugins are ready. - if (typeof Browser != 'undefined') Browser.init(); + if (typeof Browser !== 'undefined') Browser.init(); for (var plugin of preloadPlugins) { if (plugin['canHandle'](fullname)) { @@ -1382,7 +1374,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { var byteArray = url; - if (typeof url == 'string') { + if (typeof url === 'string') { byteArray = await asyncLoad(url); } @@ -1398,6 +1390,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); }; + var FS = { root:null, mounts:[], @@ -1405,11 +1398,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }, streams:[], nextInode:1, - nameTable:null, + nameTable:[], currentPath:"/", initialized:false, ignorePermissions:true, - filesystems:null, syncFSRequests:0, ErrnoError:class { name = 'ErrnoError'; @@ -1489,6 +1481,48 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { get isDevice() { return FS.isChrdev(this.mode); } + // The per-inode readiness wait-queue. The node carries a Set of listener + // entries {cb}; producers (SOCKFS, PIPEFS) call notifyListeners on a + // readiness transition, and poll()/epoll consume it. It lives on the node + // (not the fd) so dup'd fds share one queue. Only nodes that derive real + // readiness (sockets, pipes, and an epoll's own node) ever use this - + // always-ready types (regular files, ttys) never register or notify. + addListener(cb, exclusive = false) { + var entry = {cb, exclusive}; + var listeners = (this.listeners ??= new Set()); + listeners.add(entry); + return {listeners, entry}; + } + notifyListeners(flags) { + // Iterates the set without copying, which is safe ONLY under a + // load-bearing contract that every internal listener must honour: + // 1. A listener must not run user code synchronously (a poll waiter only + // resolves a Promise; an epoll registration only re-lists + + // re-notifies; the epoll callback only schedules a tick). User code + // runs on a later tick, never inside this loop. + // 2. A listener may delete entries only from ITS OWN waiter, never from + // a sibling node's set that may be mid-iteration. (Deleting an entry + // of the set being iterated here is fine - a Set tolerates removal of + // a not-yet-visited entry mid-iteration; mutating a *different* node's + // set is fine because that set is not being iterated.) + // Violating either gives silently skipped wakeups that are near-impossible + // to reproduce. Any new producer/listener must preserve it. + if (!this.listeners) return; + // Fire every non-exclusive listener. Among EPOLLEXCLUSIVE registrations + // (one fd watched by several epolls) wake only one, rotating round-robin + // per node, to avoid a thundering herd. (Only epoll registrations are ever + // exclusive; poll waiters and a node's own consumers are not.) + var excl; + for (var entry of this.listeners) { + if (entry.exclusive) (excl ||= []).push(entry); + else entry.cb(flags); + } + if (excl) { + var i = (this.exclTurn || 0) % excl.length; + this.exclTurn = i + 1; + excl[i].cb(flags); + } + } }, lookupPath(path, opts = {}) { if (!path) { @@ -1500,7 +1534,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = FS.cwd() + '/' + path; } - // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + // limit max consecutive symlinks to SYMLOOP_MAX. linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { // split the absolute path var parts = path.split('/').filter((p) => !!p); @@ -1625,7 +1659,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // if we failed to find it in the cache, call into the VFS return FS.lookup(parent, name); }, - createNode(parent, name, mode, rdev) { + createNode(parent, name, mode, rdev = undefined) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); @@ -1790,7 +1824,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var arg = setattr ? stream : node; setattr ??= node.node_ops.setattr; FS.checkOpExists(setattr, 63) - setattr(arg, attr); + try { + setattr(arg, attr); + } catch (e) { + if (e instanceof RangeError) { + throw new FS.ErrnoError(22); + } + throw e; + } }, chrdev_stream_ops:{ open(stream) { @@ -1826,7 +1867,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return mounts; }, syncfs(populate, callback) { - if (typeof populate == 'function') { + if (typeof populate === 'function') { callback = populate; populate = false; } @@ -1984,9 +2025,9 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var rtn = { bsize: 4096, frsize: 4096, - blocks: 1e6, - bfree: 5e5, - bavail: 5e5, + blocks: 1_000_000, + bfree: 500_000, + bavail: 500_000, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, @@ -2009,7 +2050,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { mode |= 16384; return FS.mknod(path, mode, 0); }, - mkdirTree(path, mode) { + mkdirTree(path, mode = 0o777) { var dirs = path.split('/'); var d = ''; for (var dir of dirs) { @@ -2023,8 +2064,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - mkdev(path, mode, dev) { - if (typeof dev == 'undefined') { + mkdev(path, mode, dev = undefined) { + if (typeof dev === 'undefined') { dev = mode; mode = 0o666; } @@ -2050,6 +2091,25 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return parent.node_ops.symlink(parent, newname, oldpath); }, + link(oldpath, newpath, flags) { + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // Hardlinks are only supported by filesystem backends that provide a + // `link` node op (e.g. NODERAWFS backed by the host). NODEFS omits it: + // a host hardlink cannot be confined to the mount root. + if (!parent.node_ops.link) { + throw new FS.ErrnoError(34); + } + return parent.node_ops.link(parent, newname, oldpath, flags); + }, rename(old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); @@ -2124,6 +2184,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // do the underlying fs rename try { old_dir.node_ops.rename(old_node, new_dir, new_name); + // The replaced node is stale now. Evict it only after the rename + // succeeded: backends like NODEFS report node.id as st_ino. + if (new_node) { + FS.hashRemoveNode(new_node); + } // update old node (we do this here to avoid each backend // needing to) old_node.parent = new_dir; @@ -2194,7 +2259,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return link.node_ops.readlink(link); }, - stat(path, dontFollow) { + stat(path, dontFollow = false) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; var getattr = FS.checkOpExists(node.node_ops.getattr, 63); @@ -2212,16 +2277,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { lstat(path) { return FS.stat(path, true); }, - doChmod(stream, node, mode, dontFollow) { + doChmod(stream, node, mode, dontFollow = false) { FS.doSetAttr(stream, node, { mode: (mode & 4095) | (node.mode & ~4095), ctime: Date.now(), dontFollow }); }, - chmod(path, mode, dontFollow) { + chmod(path, mode, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { @@ -2236,16 +2301,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var stream = FS.getStreamChecked(fd); FS.doChmod(stream, stream.node, mode, false); }, - doChown(stream, node, dontFollow) { + doChown(stream, node, dontFollow = false) { FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow // we ignore the uid / gid for now }); }, - chown(path, uid, gid, dontFollow) { + chown(path, uid, gid, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { @@ -2281,7 +2346,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { throw new FS.ErrnoError(28); } var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: true }); node = lookup.node; } else { @@ -2296,17 +2361,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } FS.doTruncate(stream, stream.node, len); }, - utime(path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - var setattr = FS.checkOpExists(node.node_ops.setattr, 63); - setattr(node, { + utime(path, atime, mtime, dontFollow = false) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + FS.doSetAttr(null, lookup.node, { atime: atime, - mtime: mtime + mtime: mtime, + dontFollow }); }, open(path, flags, mode = 0o666) { - if (path === "") { + if (path === '') { throw new FS.ErrnoError(44); } flags = FS_modeStringToFlags(flags); @@ -2317,10 +2381,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } var node; var isDirPath; - if (typeof path == 'object') { + if (typeof path === 'object') { node = path; } else { - isDirPath = path.endsWith("/"); + isDirPath = path.endsWith('/'); // noent_okay makes it so that if the final component of the path // doesn't exist, lookupPath returns `node: undefined`. `path` will be // updated to point to the target of all symlinks. @@ -2403,6 +2467,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { throw new FS.ErrnoError(8); } if (stream.getdents) stream.getdents = null; // free readdir state + // The fd is going away: wake anything waiting on it (poll/epoll) with + // POLLNVAL so a blocking wait unblocks and an epoll registration is evicted + // on its next derive. Only sockets/pipes/epoll ever carry a wait-queue, so + // for every other stream (incl. nodeless noderawfs stdio) this is a no-op. + stream.node?.notifyListeners(32); try { if (stream.stream_ops.close) { stream.stream_ops.close(stream); @@ -2431,7 +2500,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { stream.ungotten = []; return stream.position; }, - read(stream, buffer, offset, length, position) { + read(stream, buffer, offset, length, position = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2447,7 +2516,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (!stream.stream_ops.read) { throw new FS.ErrnoError(28); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2457,7 +2526,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (!seeking) stream.position += bytesRead; return bytesRead; }, - write(stream, buffer, offset, length, position, canOwn) { + write(stream, buffer, offset, length, position = undefined, canOwn = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2477,7 +2546,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // seek to the end before writing in append mode FS.llseek(stream, 0, 2); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2494,8 +2563,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // to write to file opened in read-only mode with MAP_PRIVATE flag, // as all modifications will be visible only in the memory of // the current process. - if ((prot & 2) !== 0 - && (flags & 2) === 0 + if ((prot & 2) + && !(flags & 2) && (stream.flags & 2097155) !== 2) { throw new FS.ErrnoError(2); } @@ -2523,8 +2592,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return stream.stream_ops.ioctl(stream, cmd, arg); }, readFile(path, opts = {}) { - opts.flags = opts.flags || 0; - opts.encoding = opts.encoding || 'binary'; + opts.flags ??= 0; + opts.encoding ??= 'binary'; if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { abort(`Invalid encoding type "${opts.encoding}"`); } @@ -2540,7 +2609,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return buf; }, writeFile(path, data, opts = {}) { - opts.flags = opts.flags || 577; + opts.flags ??= 577; var stream = FS.open(path, opts.flags, opts.mode); data = FS_fileDataToTypedArray(data); FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); @@ -2587,7 +2656,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // use a buffer to avoid overhead of individual crypto calls per byte var randomBuffer = new Uint8Array(1024), randomLeft = 0; var randomByte = () => { - if (randomLeft === 0) { + if (!randomLeft) { randomFill(randomBuffer); randomLeft = randomBuffer.byteLength; } @@ -2666,19 +2735,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var stderr = FS.open('/dev/stderr', 1); }, staticInit() { - FS.nameTable = new Array(4096); + FS.nameTable.length = 4096; FS.mount(MEMFS, {}, '/'); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); - - FS.filesystems = { - 'MEMFS': MEMFS, - }; }, - init(input, output, error) { + init(input = undefined, output = undefined, error = undefined) { FS.initialized = true; // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here @@ -2698,14 +2763,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - findObject(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (!ret.exists) { - return null; - } - return ret.object; - }, - analyzePath(path, dontResolveLastLink) { + analyzePath(path, dontResolveLastLink = false) { // operate from within the context of the symlink's target try { var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); @@ -2733,8 +2791,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; return ret; }, - createPath(parent, path, canRead, canWrite) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + createPath(parent, path, canRead = undefined, canWrite = undefined) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); var parts = path.split('/').reverse(); while (parts.length) { var part = parts.pop(); @@ -2749,15 +2807,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return current; }, - createFile(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createFile(parent, name, properties, canRead = undefined, canWrite = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(canRead, canWrite); return FS.create(path, mode); }, - createDataFile(parent, name, data, canRead, canWrite, canOwn) { + createDataFile(parent, name, data = undefined, canRead = undefined, canWrite = undefined, canOwn = undefined) { var path = name; if (parent) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + parent = typeof parent === 'string' ? parent : FS.getPath(parent); path = name ? PATH.join2(parent, name) : parent; } var mode = FS_getMode(canRead, canWrite); @@ -2772,8 +2830,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.chmod(node, mode); } }, - createDevice(parent, name, input, output) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createDevice(parent, name, input = undefined, output = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(!!input, !!output); FS.createDevice.major ??= 64; var dev = FS.makedev(FS.createDevice.major++, 0); @@ -2798,7 +2856,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; @@ -2829,7 +2887,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { forceLoadFile(obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; if (globalThis.XMLHttpRequest) { - abort("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + abort('Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.'); } else { // Command-line. try { obj.contents = readBinary(obj.url); @@ -2838,7 +2896,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - createLazyFile(parent, name, url, canRead, canWrite) { + createLazyFile(parent, name, url, canRead = undefined, canWrite = undefined) { // Lazy chunked Uint8Array (implements get and length from Uint8Array). // Actual getting is abstracted away for eventual reuse. class LazyUint8Array { @@ -2860,11 +2918,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var xhr = new XMLHttpRequest(); xhr.open('HEAD', url, false); xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); + var datalength = Number(xhr.getResponseHeader('Content-length')); var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes'; + var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip'; var chunkSize = 1024*1024; // Chunk size in bytes @@ -2872,13 +2930,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // Function to get a range from the remote URL. var doXHR = (from, to) => { - if (from > to) abort("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength-1) abort("only " + datalength + " bytes available! programmer error!"); + if (from > to) abort(`invalid range (${from}, ${to}) or no bytes requested!`); + if (to > datalength-1) abort(`only ${datalength} bytes available! programmer error!`); // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + if (datalength !== chunkSize) xhr.setRequestHeader('Range', `bytes=${from}-${to}`); // Some hints to the browser that we want binary data. xhr.responseType = 'arraybuffer'; @@ -2887,21 +2945,21 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); if (xhr.response !== undefined) { return new Uint8Array(/** @type{Array} */(xhr.response || [])); } - return intArrayFromString(xhr.responseText || '', true); + return intArrayFromString(xhr.responseText ?? '', true); }; var lazyArray = this; lazyArray.setDataGetter((chunkNum) => { var start = chunkNum * chunkSize; var end = (chunkNum+1) * chunkSize - 1; // including this byte end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block - if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + if (typeof lazyArray.chunks[chunkNum] === 'undefined') { lazyArray.chunks[chunkNum] = doXHR(start, end); } - if (typeof lazyArray.chunks[chunkNum] == 'undefined') abort('doXHR failed!'); + if (typeof lazyArray.chunks[chunkNum] === 'undefined') abort('doXHR failed!'); return lazyArray.chunks[chunkNum]; }); @@ -2910,7 +2968,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file datalength = this.getter(0).length; chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed"); + out('LazyFiles on gzip forces download of the whole file when length is accessed'); } this._length = datalength; @@ -3001,6 +3059,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + /** * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the * emscripten HEAP, returns a copy of that string as a Javascript String object. @@ -3019,8 +3078,19 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var end = findStringEnd(HEAPU8, ptr, maxBytesToRead, ignoreNul); return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); }; + + + /** @type {!Int32Array} */ + var HEAP32; + + /** @type {!Uint32Array} */ + var HEAPU32; + + /** not-@type {!BigInt64Array} */ + var HEAP64; var SYSCALLS = { - calculateAt(dirfd, path, allowEmpty) { + currentUmask:18, + calculateAt(dirfd, path, allowEmpty = false) { if (PATH.isAbs(path)) { return path; } @@ -3082,7 +3152,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // MAP_PRIVATE calls need not to be synced back to underlying fs return 0; } - var buffer = HEAPU8.slice(addr, addr + len); + var buffer = HEAPU8.subarray(addr, addr + len); FS.msync(stream, buffer, offset, len, flags); }, getStreamFromFD(fd) { @@ -3102,10 +3172,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.chmod(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_faccessat(dirfd, path, amode, flags) { try { @@ -3130,10 +3201,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchmod(fd, mode) { try { @@ -3141,10 +3213,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.fchmod(fd, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchown32(fd, owner, group) { try { @@ -3152,10 +3225,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.fchown(fd, owner, group); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var syscallGetVarargI = () => { // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. @@ -3166,6 +3240,9 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var syscallGetVarargP = syscallGetVarargI; + + /** @type {!Int16Array} */ + var HEAP16; function ___syscall_fcntl64(fd, cmd, varargs) { SYSCALLS.varargs = varargs; try { @@ -3191,7 +3268,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return stream.flags; case 4: { var arg = syscallGetVarargI(); - stream.flags |= arg; + var mask = 289792; + stream.flags = (stream.flags & ~mask) | (arg & mask); return 0; } case 12: { @@ -3211,20 +3289,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return -28; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fstat64(fd, buf) { try { return SYSCALLS.writeStat(buf, FS.fstat(fd)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var INT53_MAX = 9007199254740992; @@ -3236,36 +3316,43 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { - if (isNaN(length)) return -61; + if (isNaN(length)) return -22; FS.ftruncate(fd, length); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); }; function ___syscall_getcwd(buf, size) { try { - if (size === 0) return -28; + if (!size) return -28; var cwd = FS.cwd(); var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1; if (size < cwdLengthInBytes) return -68; stringToUTF8(cwd, buf, size); return cwdLengthInBytes; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + + var ___syscall_geteuid32 = () => 0; + + + function ___syscall_ioctl(fd, op, varargs) { SYSCALLS.varargs = varargs; try { @@ -3357,10 +3444,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { default: return -28; // not supported } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_lstat64(path, buf) { try { @@ -3368,23 +3456,26 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.lstat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_mkdirat(dirfd, path, mode) { try { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); - FS.mkdir(path, mode, 0); + mode &= ~SYSCALLS.currentUmask; + FS.mkdir(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_newfstatat(dirfd, path, buf, flags) { try { @@ -3396,10 +3487,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_openat(dirfd, path, flags, varargs) { @@ -3409,15 +3501,20 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); var mode = varargs ? syscallGetVarargI() : 0; + if (flags & 64) { + mode &= ~SYSCALLS.currentUmask; + } return FS.open(path, flags, mode).fd; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + function ___syscall_readlinkat(dirfd, path, buf, bufsize) { try { @@ -3434,10 +3531,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAP8[buf+len] = endChar; return len; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_rmdir(path) { try { @@ -3446,10 +3544,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.rmdir(path); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_stat64(path, buf) { try { @@ -3457,10 +3556,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_unlinkat(dirfd, path, flags) { try { @@ -3476,18 +3576,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + var readI53FromI64 = (ptr) => { return HEAPU32[((ptr)>>2)] + HEAP32[(((ptr)+(4))>>2)] * 4294967296; }; + function ___syscall_utimensat(dirfd, path, times, flags) { try { + var nofollow = flags & 256; path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path, true); var now = Date.now(), atime, mtime; @@ -3495,37 +3599,32 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { atime = now; mtime = now; } else { - var seconds = readI53FromI64(times); - var nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - atime = now; - } else if (nanoseconds == 1073741822) { - atime = null; - } else { - atime = (seconds*1000) + (nanoseconds/(1000*1000)); - } - times += 16; - seconds = readI53FromI64(times); - nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - mtime = now; - } else if (nanoseconds == 1073741822) { - mtime = null; - } else { - mtime = (seconds*1000) + (nanoseconds/(1000*1000)); + function readTimespec(ptr) { + var tv_nsec = HEAP32[(((ptr)+(8))>>2)]; + if (tv_nsec == 1073741823) { + return now; + } + if (tv_nsec == 1073741822) { + return null; + } + var tv_sec = readI53FromI64(ptr); + return (tv_sec*1000) + Math.floor(tv_nsec/(1000*1000)); } + atime = readTimespec(times); + mtime = readTimespec(times + 16); } // null here means UTIME_OMIT was passed. If both were set to UTIME_OMIT then // we can skip the call completely. if ((mtime ?? atime) !== null) { - FS.utime(path, atime, mtime); + FS.utime(path, atime, mtime, nofollow); } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); @@ -3540,11 +3639,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return yday; }; + function __localtime_js(time, tmPtr) { time = bigintToI53Checked(time); var date = new Date(time*1000); + if (isNaN(date.getTime())) { + return 1; + } HEAP32[((tmPtr)>>2)] = date.getSeconds(); HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); @@ -3563,6 +3666,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var winterOffset = start.getTimezoneOffset(); var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; HEAP32[(((tmPtr)+(32))>>2)] = dst; + return 0; ; } @@ -3571,6 +3675,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + + function __mmap_js(len, prot, flags, fd, offset, allocated, addr) { offset = bigintToI53Checked(offset); @@ -3584,7 +3690,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((addr)>>2)] = ptr; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; @@ -3602,12 +3708,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { SYSCALLS.doMsync(addr, stream, len, flags, offset); } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { // TODO: Use (malleable) environment variables instead of system settings. var currentYear = new Date().getFullYear(); @@ -3636,11 +3744,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var extractZone = (timezoneOffset) => { // Why inverse sign? // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset - var sign = timezoneOffset >= 0 ? "-" : "+"; + var sign = timezoneOffset >= 0 ? '-' : '+'; var absOffset = Math.abs(timezoneOffset) - var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); - var minutes = String(absOffset % 60).padStart(2, "0"); + var hours = String(Math.floor(absOffset / 60)).padStart(2, '0'); + var minutes = String(absOffset % 60).padStart(2, '0'); return `UTC${sign}${hours}${minutes}`; } @@ -3665,6 +3773,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3; + function _clock_time_get(clk_id, ignored_precision, ptime) { ignored_precision = bigintToI53Checked(ignored_precision); @@ -3682,7 +3791,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return 52; } // "now" is in ms, and wasi times are in ns. - var nsec = Math.round(now * 1000 * 1000); + var nsec = Math.round(now * 1_000_000); HEAP64[((ptime)>>3)] = BigInt(nsec); return 0; ; @@ -3710,9 +3819,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return 1 /*success*/; } catch(e) { } - // implicit 0 return to save code size (caller will cast "undefined" into 0 + // implicit 0 return to save code size (caller will cast 'undefined' into 0 // anyhow) }; + var _emscripten_resize_heap = (requestedSize) => { var oldSize = HEAPU8.length; // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. @@ -3766,11 +3876,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var ENV = { }; - var getExecutableName = () => thisProgram || './this.program'; + var getExecutableName = () => thisProgram; var getEnvStrings = () => { if (!getEnvStrings.strings) { // Default values. - // Browser language detection #8751 var lang = (globalThis.navigator?.language ?? 'C').replace('-', '_') + '.UTF-8'; var env = { 'USER': 'web_user', @@ -3798,6 +3907,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return getEnvStrings.strings; }; + var _environ_get = (__environ, environ_buf) => { var bufSize = 0; var envp = 0; @@ -3811,6 +3921,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; + var _environ_sizes_get = (penviron_count, penviron_buf_size) => { var strings = getEnvStrings(); HEAPU32[((penviron_count)>>2)] = strings.length; @@ -3829,11 +3940,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.close(stream); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + function _fd_fdstat_get(fd, pbuf) { try { @@ -3855,11 +3970,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + /** @param {number=} offset */ var doReadv = (stream, iov, iovcnt, offset) => { var ret = 0; @@ -3867,17 +3984,29 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; iov += 8; - var curr = FS.read(stream, HEAP8, ptr, len, offset); + try { + var curr = FS.read(stream, HEAP8, ptr, len, offset); + } catch (e) { + // On a non-blocking stream a subsequent read may would-block after we + // already gathered data. POSIX readv is a single gather-read: return + // what we have rather than failing the whole call. + if (ret > 0 && e instanceof FS.ErrnoError && + (e.errno == 6 || e.errno == 6)) { + break; + } + throw e; + } if (curr < 0) return -1; ret += curr; if (curr < len) break; // nothing more to read - if (typeof offset != 'undefined') { + if (typeof offset !== 'undefined') { offset += curr; } } return ret; }; + function _fd_read(fd, iov, iovcnt, pnum) { try { @@ -3886,26 +4015,28 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + function _fd_seek(fd, offset, whence, newOffset) { offset = bigintToI53Checked(offset); try { - if (isNaN(offset)) return 61; + if (isNaN(offset)) return 22; var stream = SYSCALLS.getStreamFromFD(fd); FS.llseek(stream, offset, whence); HEAP64[((newOffset)>>3)] = BigInt(stream.position); - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + if (stream.getdents && !offset && whence === 0) stream.getdents = null; // reset readdir state return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } ; @@ -3918,32 +4049,40 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var rtn = stream.stream_ops?.fsync?.(stream); return rtn; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + /** @param {number=} offset */ var doWritev = (stream, iov, iovcnt, offset) => { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { + // Gather all iovecs into one contiguous buffer and issue a single + // FS.write, matching POSIX writev's single gather-write semantics (as + // __syscall_sendmsg already does). Per-iovec writes fragment a stream + // socket send into multiple segments, breaking stream byte semantics. + if (iovcnt == 1) { + // Single iovec: write directly from HEAP8, no gather buffer needed. + return FS.write(stream, HEAP8, HEAPU32[((iov)>>2)], HEAPU32[(((iov)+(4))>>2)], offset); + } + var total = 0; + for (var i = 0, p = iov; i < iovcnt; i++, p += 8) { + total += HEAPU32[(((p)+(4))>>2)]; + } + var view = new Uint8Array(total); + var voff = 0; + for (var i = 0; i < iovcnt; i++, iov += 8) { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; - iov += 8; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) { - // No more space to write. - break; - } - if (typeof offset != 'undefined') { - offset += curr; - } + view.set(HEAPU8.subarray(ptr, ptr + len), voff); + voff += len; } - return ret; + return FS.write(stream, view, 0, total, offset); }; + function _fd_write(fd, iov, iovcnt, pnum) { try { @@ -3952,10 +4091,72 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + + + + /** @type {!Float32Array} */ + var HEAPF32; + + /** @type {!Float64Array} */ + var HEAPF64; + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + + + + + + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + + + FS.createPreloadedFile = FS_createPreloadedFile; @@ -3974,19 +4175,21 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // Begin ATMODULES hooks if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime']; -if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins']; + if (Module['print']) out = Module['print']; if (Module['printErr']) err = Module['printErr']; -if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; // End ATMODULES hooks - if (Module['arguments']) arguments_ = Module['arguments']; + if (Module['arguments']) programArgs = Module['arguments']; if (Module['thisProgram']) thisProgram = Module['thisProgram']; - if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].shift()(); + var preInit = Module['preInit']; + if (preInit) { + if (typeof preInit === 'function') Module['preInit'] = preInit = [preInit]; + // Written as a loop so that preInit functions that themselves add more + // preInit functions. Is this actually needed? + while (preInit.length > 0) { + preInit.shift()(); } } } @@ -4263,6 +4466,7 @@ var _sqlite3_status64, _free, _realloc, _emscripten_builtin_memalign, + _setThrew, __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, @@ -4532,6 +4736,7 @@ function assignWasmExports(wasmExports) { _free = Module['_free'] = wasmExports['free']; _realloc = Module['_realloc'] = wasmExports['realloc']; _emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign']; + _setThrew = wasmExports['setThrew']; __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; @@ -4556,6 +4761,8 @@ var wasmImports = { /** @export */ __syscall_getcwd: ___syscall_getcwd, /** @export */ + __syscall_geteuid32: ___syscall_geteuid32, + /** @export */ __syscall_ioctl: ___syscall_ioctl, /** @export */ __syscall_lstat64: ___syscall_lstat64, @@ -4617,55 +4824,38 @@ var wasmImports = { // include: postamble.js // === Auto-generated postamble setup entry stuff === -function run() { - - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } +async function run() { preRun(); - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; + if (runDependencies) { + await resolveRunDependencies(); } - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - Module['calledRun'] = true; - - if (ABORT) return; + var setStatus = Module['setStatus']; + if (setStatus) { + setStatus('Running...'); + // Yield to the event loop to allow the browser to paint "Running..." + await new Promise((resolve) => setTimeout(resolve, 1)); + // Then we want to clear the status text, but only after the rest of this function runs. + setTimeout(setStatus, 1, ''); + } - initRuntime(); + if (ABORT) return; - readyPromiseResolve?.(Module); - Module['onRuntimeInitialized']?.(); + initRuntime(); - postRun(); - } + Module['onRuntimeInitialized']?.(); - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(() => { - setTimeout(() => Module['setStatus'](''), 1); - doRun(); - }, 1); - } else - { - doRun(); - } + postRun(); } var wasmExports; // In modularize mode the generated code is within a factory function so we // can use await here (since it's not top-level-await). -wasmExports = await (createWasm()); - -run(); +wasmExports = await createWasm(); +await run(); // end include: postamble.js @@ -4745,7 +4935,7 @@ Module.runSQLite3PostLoadInit = async function( ** SQLITE_VERSION_NUMBER 3054001 ** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Emscripten SDK: 5.0.5 +** Emscripten SDK: 6.0.13 */ /* 2022-05-22 @@ -21581,25 +21771,12 @@ try{ // include: postamble_modularize.js // In MODULARIZE mode we wrap the generated code in a factory function // and return either the Module itself, or a promise of the module. -// -// We assign to the `moduleRtn` global here and configure closure to see -// this as an extern so it won't get minified. - -if (runtimeInitialized) { - moduleRtn = Module; -} else { - // Set up the promise that indicates the Module is initialized - moduleRtn = new Promise((resolve, reject) => { - readyPromiseResolve = resolve; - readyPromiseReject = reject; - }); -} // end include: postamble_modularize.js - return moduleRtn; + return Module; } // Export using a UMD style export, or ES6 exports if selected diff --git a/src/bin/sqlite3-node.mjs b/src/bin/sqlite3-node.mjs index 068e049..48ba552 100644 --- a/src/bin/sqlite3-node.mjs +++ b/src/bin/sqlite3-node.mjs @@ -31,7 +31,7 @@ ** SQLITE_VERSION_NUMBER 3054001 ** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Emscripten SDK: 5.0.5 +** Emscripten SDK: 6.0.13 */ // This code implements the `-sMODULARIZE` settings by taking the generated // JS program code (INNER_JS_CODE) and wrapping it in a factory function. @@ -39,8 +39,7 @@ // When targeting node and ES6 we use `await import ..` in the generated code // so the outer function needs to be marked as async. async function sqlite3InitModule(moduleArg = {}) { - var moduleRtn; - + var Module = moduleArg; // include: shell.js // include: minimum_runtime_check.js // end include: minimum_runtime_check.js @@ -57,15 +56,14 @@ async function sqlite3InitModule(moduleArg = {}) { // after the generated code, you will need to define var Module = {}; // before the code. Then that object will be used in the code, and you // can continue to use Module afterwards as well. -var Module = moduleArg; // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). -var ENVIRONMENT_IS_WEB = false; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = true; -var ENVIRONMENT_IS_SHELL = false; +const ENVIRONMENT_IS_WEB = false; +const ENVIRONMENT_IS_WORKER = false; +const ENVIRONMENT_IS_NODE = true; +const ENVIRONMENT_IS_SHELL = false; if (ENVIRONMENT_IS_NODE) { // When building an ES module `require` is not normally available. @@ -115,7 +113,7 @@ if (ENVIRONMENT_IS_NODE) { // end include: ./bld/pre-js.node.js -var arguments_ = []; +var programArgs = []; var thisProgram = './this.program'; var quit_ = (status, toThrow) => { throw toThrow; @@ -164,7 +162,7 @@ readAsync = async (filename, binary = true) => { thisProgram = process.argv[1].replace(/\\/g, '/'); } - arguments_ = process.argv.slice(2); + programArgs = process.argv.slice(2); quit_ = (status, toThrow) => { process.exitCode = status; @@ -233,8 +231,6 @@ function assert(condition, text) { var isFileURI = (filename) => filename.startsWith('file://'); // include: runtime_common.js -// include: runtime_stack_check.js -// end include: runtime_stack_check.js // include: runtime_exceptions.js // Base Emscripten EH error class class EmscriptenEH {} @@ -244,34 +240,39 @@ class EmscriptenSjLj extends EmscriptenEH {} // end include: runtime_exceptions.js // include: runtime_debug.js // end include: runtime_debug.js -var readyPromiseResolve, readyPromiseReject; - // Memory management var runtimeInitialized = false; +// When ALLOW_MEMORY_GROWTH is enabled, the conversion from Wasm +// memory to ArrayBuffer requires some additional logic. +function getMemoryBuffer() { + return wasmMemory.buffer; +} + function updateMemoryViews() { - var b = wasmMemory.buffer; + // If we already have a heap that is resizeable/growable buffer we don't + // need to do anything in updateMemoryViews. + if (HEAP8?.buffer?.resizable) return; + var b = getMemoryBuffer(); HEAP8 = new Int8Array(b); HEAP16 = new Int16Array(b); HEAPU8 = new Uint8Array(b); - HEAPU16 = new Uint16Array(b); + HEAP32 = new Int32Array(b); HEAPU32 = new Uint32Array(b); HEAPF32 = new Float32Array(b); HEAPF64 = new Float64Array(b); HEAP64 = new BigInt64Array(b); - HEAPU64 = new BigUint64Array(b); + } // In non-standalone/normal mode, we create the memory here. // include: runtime_init_memory.js // Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined) -// check for full engine support (use string 'subarray' to avoid closure compiler confusion) - function initMemory() { @@ -303,11 +304,10 @@ function initMemory() { // end include: memoryprofiler.js // end include: runtime_common.js function preRun() { - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } + var preRun = Module['preRun']; + if (preRun) { + if (typeof preRun === 'function') preRun = [preRun]; + onPreRuns.push(...preRun); } // Begin ATPRERUNS hooks callRuntimeCallbacks(onPreRuns); @@ -327,16 +327,15 @@ TTY.init(); // Begin ATPOSTCTORS hooks FS.ignorePermissions = false; // End ATPOSTCTORS hooks + } function postRun() { - // PThreads reuse the runtime from the main thread. - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } + var postRun = Module['postRun']; + if (postRun) { + if (typeof postRun === 'function') postRun = [postRun]; + onPostRuns.push(...postRun); } // Begin ATPOSTRUNS hooks @@ -346,7 +345,6 @@ function postRun() { /** * @param {string|number=} what - * @noreturn */ function abort(what) { Module['onAbort']?.(what); @@ -368,19 +366,7 @@ function abort(what) { // a trap or not based on a hidden field within the object. So at the moment // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that // allows this in the wasm spec. - - // Suppress closure compiler warning here. Closure compiler's builtin extern - // definition for WebAssembly.RuntimeError claims it takes no arguments even - // though it can. - // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. - /** @suppress {checkTypes} */ - var e = new WebAssembly.RuntimeError(what); - - readyPromiseReject?.(e); - // Throw the error whether or not MODULARIZE is set because abort is used - // in code paths apart from instantiation where an exception is expected - // to be thrown when abort is called. - throw e; + throw new WebAssembly.RuntimeError(what); } var wasmBinaryFile; @@ -397,9 +383,6 @@ function findWasmBinary() { } function getBinarySync(file) { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } if (readBinary) { return readBinary(file); } @@ -438,12 +421,9 @@ async function instantiateArrayBuffer(binaryFile, imports) { async function instantiateAsync(binary, binaryFile, imports) { if (!binary - // Avoid instantiateStreaming() on Node.js environment for now, as while - // Node.js v18.1.0 implements it, it does not have a full fetch() - // implementation yet. - // - // Reference: - // https://github.com/emscripten-core/emscripten/pull/16917 + // Avoid using instantiateStreaming() on Node.js since the `fetch()` API + // does not support `file://` URLs. + // See: https://github.com/emscripten-core/emscripten/pull/16917 && !ENVIRONMENT_IS_NODE ) { try { @@ -476,8 +456,7 @@ async function createWasm() { // Load the wasm module and create an instance of using native support in the JS engine. // handle a generated wasm instance, receiving its exports and // performing other necessary setup - /** @param {WebAssembly.Module=} module*/ - function receiveInstance(instance, module) { + function receiveInstance(instance) { wasmExports = instance.exports; assignWasmExports(wasmExports); @@ -502,11 +481,10 @@ async function createWasm() { // performing. // Also pthreads and wasm workers initialize the wasm instance through this // path. - if (Module['instantiateWasm']) { - return new Promise((resolve, reject) => { - Module['instantiateWasm'](info, (inst, mod) => { - resolve(receiveInstance(inst, mod)); - }); + var instantiateWasm = Module['instantiateWasm']; + if (instantiateWasm) { + return new Promise((resolve) => { + instantiateWasm(info, (inst) => resolve(receiveInstance(inst))); }); } @@ -529,36 +507,9 @@ async function createWasm() { } } - /** @type {!Int16Array} */ - var HEAP16; - - /** @type {!Int32Array} */ - var HEAP32; - - /** not-@type {!BigInt64Array} */ - var HEAP64; - /** @type {!Int8Array} */ var HEAP8; - /** @type {!Float32Array} */ - var HEAPF32; - - /** @type {!Float64Array} */ - var HEAPF64; - - /** @type {!Uint16Array} */ - var HEAPU16; - - /** @type {!Uint32Array} */ - var HEAPU32; - - /** not-@type {!BigUint64Array} */ - var HEAPU64; - - /** @type {!Uint8Array} */ - var HEAPU8; - var callRuntimeCallbacks = (callbacks) => { while (callbacks.length > 0) { // Pass the module as the first argument. @@ -572,49 +523,8 @@ async function createWasm() { var addOnPreRun = (cb) => onPreRuns.push(cb); - - /** - * @param {number} ptr - * @param {string} type - */ - function getValue(ptr, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': return HEAP8[ptr]; - case 'i8': return HEAP8[ptr]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP64[((ptr)>>3)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - case '*': return HEAPU32[((ptr)>>2)]; - default: abort(`invalid type for getValue: ${type}`); - } - } - var noExitRuntime = true; - - /** - * @param {number} ptr - * @param {number} value - * @param {string} type - */ - function setValue(ptr, value, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': HEAP8[ptr] = value; break; - case 'i8': HEAP8[ptr] = value; break; - case 'i16': HEAP16[((ptr)>>1)] = value; break; - case 'i32': HEAP32[((ptr)>>2)] = value; break; - case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; - case 'float': HEAPF32[((ptr)>>2)] = value; break; - case 'double': HEAPF64[((ptr)>>3)] = value; break; - case '*': HEAPU32[((ptr)>>2)] = value; break; - default: abort(`invalid type for setValue: ${type}`); - } - } - var stackRestore = (val) => __emscripten_stack_restore(val); var stackSave = () => _emscripten_stack_get_current(); @@ -686,7 +596,7 @@ var initRandomFill = () => { // This block is not needed on v19+ since crypto.getRandomValues is builtin if (ENVIRONMENT_IS_NODE) { var nodeCrypto = require('node:crypto'); - return (view) => nodeCrypto.randomFillSync(view); + return (view) => (nodeCrypto.randomFillSync(view), 0); } return (view) => (crypto.getRandomValues(view), 0); @@ -702,7 +612,7 @@ resolve:(...args) => { for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? args[i] : FS.cwd(); // Skip empty and invalid entries - if (typeof path != 'string') { + if (typeof path !== 'string') { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { return ''; // an invalid portion invalidates the whole thing @@ -752,18 +662,26 @@ relative:(from, to) => { var UTF8Decoder = new TextDecoder(); -var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { - var maxIdx = idx + maxBytesToRead; - if (ignoreNul) return maxIdx; - // TextDecoder needs to know the byte length in advance, it doesn't stop on - // null terminator by itself. - // As a tiny code save trick, compare idx against maxIdx using a negation, - // so that maxBytesToRead=undefined/NaN means Infinity. - while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; - return idx; - }; /** + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @param {boolean=} ignoreNul + * @return {number} + */ + var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + var maxIdx = idx + maxBytesToRead; + if (ignoreNul) return maxIdx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. + // As a tiny code save trick, compare idx against maxIdx using a negation, + // so that maxBytesToRead=undefined/NaN means Infinity. + while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; + return idx; + }; + + /** * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given * array that contains uint8 values, returns a copy of that string as a * Javascript String object. @@ -860,17 +778,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var buf = Buffer.alloc(BUFSIZE); var bytesRead = 0; - // For some reason we must suppress a closure warning here, even though - // fd definitely exists on process.stdin, and is even the proper way to - // get the fd of stdin, - // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 - // This started to happen after moving this logic out of library_tty.js, - // so it is related to the surrounding code in some unclear manner. - /** @suppress {missingProperties} */ - var fd = process.stdin.fd; - try { - bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + bytesRead = fs.readSync(process.stdin.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 @@ -880,7 +789,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString('utf-8'); + result = buf.toString('utf-8', 0, bytesRead); } } else {} @@ -946,12 +855,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; bytesRead++; buffer[offset+i] = result; + // We currently only support canonical mode (ICANON), where + // read(2) returns as soon as a line delimiter is read. + if (result === 10) break; } if (bytesRead) { stream.node.atime = Date.now(); @@ -1034,6 +946,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; + /** @type {!Uint8Array} */ + var HEAPU8; var zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size); var alignMemory = (size, alignment) => { @@ -1045,12 +959,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (ptr) zeroMemory(ptr, size); return ptr; }; + var MEMFS = { ops_table:null, mount(mount) { return MEMFS.createNode(null, '/', 16895, 0); }, - createNode(parent, name, mode, dev) { + createNode(parent, name, mode, dev = undefined) { if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { // not supported throw new FS.ErrnoError(63); @@ -1143,7 +1058,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // For small filesizes (<1MB), perform size*2 geometric increase, but for // large sizes, do a much more conservative size*1.125 increase to avoid // overshooting the allocation cap by a very large margin. - var CAPACITY_DOUBLING_MAX = 1024 * 1024; + const CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); if (prevCapacity) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. var oldContents = MEMFS.getFileDataAsTypedArray(node); @@ -1187,7 +1102,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return attr; }, setattr(node, attr) { - for (const key of ["mode", "atime", "mtime", "ctime"]) { + for (const key of ['mode', 'atime', 'mtime', 'ctime']) { if (attr[key] != null) { node[key] = attr[key]; } @@ -1206,7 +1121,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } throw MEMFS.doesNotExistError; }, - mknod(parent, name, mode, dev) { + mknod(parent, name, mode, dev = undefined) { return MEMFS.createNode(parent, name, mode, dev); }, rename(old_node, new_dir, new_name) { @@ -1214,14 +1129,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { new_node = FS.lookupNode(new_dir, new_name); } catch (e) {} - if (new_node) { - if (FS.isDir(old_node.mode)) { - // if we're overwriting a directory at new_name, make sure it's empty. - for (var i in new_node.contents) { - throw new FS.ErrnoError(55); - } + if (new_node && FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); } - FS.hashRemoveNode(new_node); } // do the internal rewiring delete old_node.parent.contents[old_node.name]; @@ -1280,7 +1192,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (canOwn) { node.contents = buffer.subarray(offset, offset + length); node.usedBytes = length; - } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + } else if (!node.usedBytes && !position) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. node.contents = buffer.slice(offset, offset + length); node.usedBytes = length; } else { @@ -1347,7 +1259,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; var FS_modeStringToFlags = (str) => { - if (typeof str != 'string') return str; + if (typeof str !== 'string') return str; var flagModes = { 'r': 0, 'r+': 2, @@ -1357,14 +1269,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { 'a+': 1024 | 64 | 2, }; var flags = flagModes[str]; - if (typeof flags == 'undefined') { + if (typeof flags === 'undefined') { throw new Error(`Unknown file open mode: ${str}`); } return flags; }; var FS_fileDataToTypedArray = (data) => { - if (typeof data == 'string') { + if (typeof data === 'string') { data = intArrayFromString(data, true); } if (!data.subarray) { @@ -1393,24 +1305,27 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return id; }; + var dependenciesPromise = null; + var resolveRunDependencies = async () => dependenciesPromise; var runDependencies = 0; - var dependenciesFulfilled = null; + var dependenciesPromiseResolve = null; var removeRunDependency = (id) => { runDependencies--; Module['monitorRunDependencies']?.(runDependencies); - if (runDependencies == 0) { - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } + if (!runDependencies) { + dependenciesPromiseResolve(); } }; + + var addRunDependency = (id) => { + if (!runDependencies) { + dependenciesPromise = new Promise((resolve) => dependenciesPromiseResolve = resolve); + } runDependencies++; Module['monitorRunDependencies']?.(runDependencies); @@ -1421,7 +1336,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var preloadPlugins = []; var FS_handledByPreloadPlugin = async (byteArray, fullname) => { // Ensure plugins are ready. - if (typeof Browser != 'undefined') Browser.init(); + if (typeof Browser !== 'undefined') Browser.init(); for (var plugin of preloadPlugins) { if (plugin['canHandle'](fullname)) { @@ -1441,7 +1356,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { var byteArray = url; - if (typeof url == 'string') { + if (typeof url === 'string') { byteArray = await asyncLoad(url); } @@ -1457,6 +1372,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); }; + var FS = { root:null, mounts:[], @@ -1464,11 +1380,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }, streams:[], nextInode:1, - nameTable:null, + nameTable:[], currentPath:"/", initialized:false, ignorePermissions:true, - filesystems:null, syncFSRequests:0, ErrnoError:class { name = 'ErrnoError'; @@ -1548,6 +1463,48 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { get isDevice() { return FS.isChrdev(this.mode); } + // The per-inode readiness wait-queue. The node carries a Set of listener + // entries {cb}; producers (SOCKFS, PIPEFS) call notifyListeners on a + // readiness transition, and poll()/epoll consume it. It lives on the node + // (not the fd) so dup'd fds share one queue. Only nodes that derive real + // readiness (sockets, pipes, and an epoll's own node) ever use this - + // always-ready types (regular files, ttys) never register or notify. + addListener(cb, exclusive = false) { + var entry = {cb, exclusive}; + var listeners = (this.listeners ??= new Set()); + listeners.add(entry); + return {listeners, entry}; + } + notifyListeners(flags) { + // Iterates the set without copying, which is safe ONLY under a + // load-bearing contract that every internal listener must honour: + // 1. A listener must not run user code synchronously (a poll waiter only + // resolves a Promise; an epoll registration only re-lists + + // re-notifies; the epoll callback only schedules a tick). User code + // runs on a later tick, never inside this loop. + // 2. A listener may delete entries only from ITS OWN waiter, never from + // a sibling node's set that may be mid-iteration. (Deleting an entry + // of the set being iterated here is fine - a Set tolerates removal of + // a not-yet-visited entry mid-iteration; mutating a *different* node's + // set is fine because that set is not being iterated.) + // Violating either gives silently skipped wakeups that are near-impossible + // to reproduce. Any new producer/listener must preserve it. + if (!this.listeners) return; + // Fire every non-exclusive listener. Among EPOLLEXCLUSIVE registrations + // (one fd watched by several epolls) wake only one, rotating round-robin + // per node, to avoid a thundering herd. (Only epoll registrations are ever + // exclusive; poll waiters and a node's own consumers are not.) + var excl; + for (var entry of this.listeners) { + if (entry.exclusive) (excl ||= []).push(entry); + else entry.cb(flags); + } + if (excl) { + var i = (this.exclTurn || 0) % excl.length; + this.exclTurn = i + 1; + excl[i].cb(flags); + } + } }, lookupPath(path, opts = {}) { if (!path) { @@ -1559,7 +1516,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = FS.cwd() + '/' + path; } - // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + // limit max consecutive symlinks to SYMLOOP_MAX. linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { // split the absolute path var parts = path.split('/').filter((p) => !!p); @@ -1684,7 +1641,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // if we failed to find it in the cache, call into the VFS return FS.lookup(parent, name); }, - createNode(parent, name, mode, rdev) { + createNode(parent, name, mode, rdev = undefined) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); @@ -1849,7 +1806,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var arg = setattr ? stream : node; setattr ??= node.node_ops.setattr; FS.checkOpExists(setattr, 63) - setattr(arg, attr); + try { + setattr(arg, attr); + } catch (e) { + if (e instanceof RangeError) { + throw new FS.ErrnoError(22); + } + throw e; + } }, chrdev_stream_ops:{ open(stream) { @@ -1885,7 +1849,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return mounts; }, syncfs(populate, callback) { - if (typeof populate == 'function') { + if (typeof populate === 'function') { callback = populate; populate = false; } @@ -2043,9 +2007,9 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var rtn = { bsize: 4096, frsize: 4096, - blocks: 1e6, - bfree: 5e5, - bavail: 5e5, + blocks: 1_000_000, + bfree: 500_000, + bavail: 500_000, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, @@ -2068,7 +2032,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { mode |= 16384; return FS.mknod(path, mode, 0); }, - mkdirTree(path, mode) { + mkdirTree(path, mode = 0o777) { var dirs = path.split('/'); var d = ''; for (var dir of dirs) { @@ -2082,8 +2046,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - mkdev(path, mode, dev) { - if (typeof dev == 'undefined') { + mkdev(path, mode, dev = undefined) { + if (typeof dev === 'undefined') { dev = mode; mode = 0o666; } @@ -2109,6 +2073,25 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return parent.node_ops.symlink(parent, newname, oldpath); }, + link(oldpath, newpath, flags) { + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // Hardlinks are only supported by filesystem backends that provide a + // `link` node op (e.g. NODERAWFS backed by the host). NODEFS omits it: + // a host hardlink cannot be confined to the mount root. + if (!parent.node_ops.link) { + throw new FS.ErrnoError(34); + } + return parent.node_ops.link(parent, newname, oldpath, flags); + }, rename(old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); @@ -2183,6 +2166,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // do the underlying fs rename try { old_dir.node_ops.rename(old_node, new_dir, new_name); + // The replaced node is stale now. Evict it only after the rename + // succeeded: backends like NODEFS report node.id as st_ino. + if (new_node) { + FS.hashRemoveNode(new_node); + } // update old node (we do this here to avoid each backend // needing to) old_node.parent = new_dir; @@ -2253,7 +2241,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return link.node_ops.readlink(link); }, - stat(path, dontFollow) { + stat(path, dontFollow = false) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; var getattr = FS.checkOpExists(node.node_ops.getattr, 63); @@ -2271,16 +2259,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { lstat(path) { return FS.stat(path, true); }, - doChmod(stream, node, mode, dontFollow) { + doChmod(stream, node, mode, dontFollow = false) { FS.doSetAttr(stream, node, { mode: (mode & 4095) | (node.mode & ~4095), ctime: Date.now(), dontFollow }); }, - chmod(path, mode, dontFollow) { + chmod(path, mode, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { @@ -2295,16 +2283,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var stream = FS.getStreamChecked(fd); FS.doChmod(stream, stream.node, mode, false); }, - doChown(stream, node, dontFollow) { + doChown(stream, node, dontFollow = false) { FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow // we ignore the uid / gid for now }); }, - chown(path, uid, gid, dontFollow) { + chown(path, uid, gid, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { @@ -2340,7 +2328,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { throw new FS.ErrnoError(28); } var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: true }); node = lookup.node; } else { @@ -2355,17 +2343,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } FS.doTruncate(stream, stream.node, len); }, - utime(path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - var setattr = FS.checkOpExists(node.node_ops.setattr, 63); - setattr(node, { + utime(path, atime, mtime, dontFollow = false) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + FS.doSetAttr(null, lookup.node, { atime: atime, - mtime: mtime + mtime: mtime, + dontFollow }); }, open(path, flags, mode = 0o666) { - if (path === "") { + if (path === '') { throw new FS.ErrnoError(44); } flags = FS_modeStringToFlags(flags); @@ -2376,10 +2363,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } var node; var isDirPath; - if (typeof path == 'object') { + if (typeof path === 'object') { node = path; } else { - isDirPath = path.endsWith("/"); + isDirPath = path.endsWith('/'); // noent_okay makes it so that if the final component of the path // doesn't exist, lookupPath returns `node: undefined`. `path` will be // updated to point to the target of all symlinks. @@ -2462,6 +2449,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { throw new FS.ErrnoError(8); } if (stream.getdents) stream.getdents = null; // free readdir state + // The fd is going away: wake anything waiting on it (poll/epoll) with + // POLLNVAL so a blocking wait unblocks and an epoll registration is evicted + // on its next derive. Only sockets/pipes/epoll ever carry a wait-queue, so + // for every other stream (incl. nodeless noderawfs stdio) this is a no-op. + stream.node?.notifyListeners(32); try { if (stream.stream_ops.close) { stream.stream_ops.close(stream); @@ -2490,7 +2482,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { stream.ungotten = []; return stream.position; }, - read(stream, buffer, offset, length, position) { + read(stream, buffer, offset, length, position = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2506,7 +2498,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (!stream.stream_ops.read) { throw new FS.ErrnoError(28); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2516,7 +2508,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (!seeking) stream.position += bytesRead; return bytesRead; }, - write(stream, buffer, offset, length, position, canOwn) { + write(stream, buffer, offset, length, position = undefined, canOwn = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2536,7 +2528,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // seek to the end before writing in append mode FS.llseek(stream, 0, 2); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2553,8 +2545,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // to write to file opened in read-only mode with MAP_PRIVATE flag, // as all modifications will be visible only in the memory of // the current process. - if ((prot & 2) !== 0 - && (flags & 2) === 0 + if ((prot & 2) + && !(flags & 2) && (stream.flags & 2097155) !== 2) { throw new FS.ErrnoError(2); } @@ -2582,8 +2574,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return stream.stream_ops.ioctl(stream, cmd, arg); }, readFile(path, opts = {}) { - opts.flags = opts.flags || 0; - opts.encoding = opts.encoding || 'binary'; + opts.flags ??= 0; + opts.encoding ??= 'binary'; if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { abort(`Invalid encoding type "${opts.encoding}"`); } @@ -2599,7 +2591,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return buf; }, writeFile(path, data, opts = {}) { - opts.flags = opts.flags || 577; + opts.flags ??= 577; var stream = FS.open(path, opts.flags, opts.mode); data = FS_fileDataToTypedArray(data); FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); @@ -2646,7 +2638,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // use a buffer to avoid overhead of individual crypto calls per byte var randomBuffer = new Uint8Array(1024), randomLeft = 0; var randomByte = () => { - if (randomLeft === 0) { + if (!randomLeft) { randomFill(randomBuffer); randomLeft = randomBuffer.byteLength; } @@ -2725,19 +2717,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var stderr = FS.open('/dev/stderr', 1); }, staticInit() { - FS.nameTable = new Array(4096); + FS.nameTable.length = 4096; FS.mount(MEMFS, {}, '/'); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); - - FS.filesystems = { - 'MEMFS': MEMFS, - }; }, - init(input, output, error) { + init(input = undefined, output = undefined, error = undefined) { FS.initialized = true; // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here @@ -2757,14 +2745,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - findObject(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (!ret.exists) { - return null; - } - return ret.object; - }, - analyzePath(path, dontResolveLastLink) { + analyzePath(path, dontResolveLastLink = false) { // operate from within the context of the symlink's target try { var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); @@ -2792,8 +2773,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; return ret; }, - createPath(parent, path, canRead, canWrite) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + createPath(parent, path, canRead = undefined, canWrite = undefined) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); var parts = path.split('/').reverse(); while (parts.length) { var part = parts.pop(); @@ -2808,15 +2789,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return current; }, - createFile(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createFile(parent, name, properties, canRead = undefined, canWrite = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(canRead, canWrite); return FS.create(path, mode); }, - createDataFile(parent, name, data, canRead, canWrite, canOwn) { + createDataFile(parent, name, data = undefined, canRead = undefined, canWrite = undefined, canOwn = undefined) { var path = name; if (parent) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + parent = typeof parent === 'string' ? parent : FS.getPath(parent); path = name ? PATH.join2(parent, name) : parent; } var mode = FS_getMode(canRead, canWrite); @@ -2831,8 +2812,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.chmod(node, mode); } }, - createDevice(parent, name, input, output) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createDevice(parent, name, input = undefined, output = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(!!input, !!output); FS.createDevice.major ??= 64; var dev = FS.makedev(FS.createDevice.major++, 0); @@ -2857,7 +2838,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; @@ -2888,7 +2869,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { forceLoadFile(obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; if (globalThis.XMLHttpRequest) { - abort("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + abort('Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.'); } else { // Command-line. try { obj.contents = readBinary(obj.url); @@ -2897,7 +2878,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - createLazyFile(parent, name, url, canRead, canWrite) { + createLazyFile(parent, name, url, canRead = undefined, canWrite = undefined) { // Lazy chunked Uint8Array (implements get and length from Uint8Array). // Actual getting is abstracted away for eventual reuse. class LazyUint8Array { @@ -2919,11 +2900,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var xhr = new XMLHttpRequest(); xhr.open('HEAD', url, false); xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); + var datalength = Number(xhr.getResponseHeader('Content-length')); var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes'; + var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip'; var chunkSize = 1024*1024; // Chunk size in bytes @@ -2931,13 +2912,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // Function to get a range from the remote URL. var doXHR = (from, to) => { - if (from > to) abort("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength-1) abort("only " + datalength + " bytes available! programmer error!"); + if (from > to) abort(`invalid range (${from}, ${to}) or no bytes requested!`); + if (to > datalength-1) abort(`only ${datalength} bytes available! programmer error!`); // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + if (datalength !== chunkSize) xhr.setRequestHeader('Range', `bytes=${from}-${to}`); // Some hints to the browser that we want binary data. xhr.responseType = 'arraybuffer'; @@ -2946,21 +2927,21 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); if (xhr.response !== undefined) { return new Uint8Array(/** @type{Array} */(xhr.response || [])); } - return intArrayFromString(xhr.responseText || '', true); + return intArrayFromString(xhr.responseText ?? '', true); }; var lazyArray = this; lazyArray.setDataGetter((chunkNum) => { var start = chunkNum * chunkSize; var end = (chunkNum+1) * chunkSize - 1; // including this byte end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block - if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + if (typeof lazyArray.chunks[chunkNum] === 'undefined') { lazyArray.chunks[chunkNum] = doXHR(start, end); } - if (typeof lazyArray.chunks[chunkNum] == 'undefined') abort('doXHR failed!'); + if (typeof lazyArray.chunks[chunkNum] === 'undefined') abort('doXHR failed!'); return lazyArray.chunks[chunkNum]; }); @@ -2969,7 +2950,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file datalength = this.getter(0).length; chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed"); + out('LazyFiles on gzip forces download of the whole file when length is accessed'); } this._length = datalength; @@ -3060,6 +3041,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + /** * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the * emscripten HEAP, returns a copy of that string as a Javascript String object. @@ -3078,8 +3060,19 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var end = findStringEnd(HEAPU8, ptr, maxBytesToRead, ignoreNul); return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); }; + + + /** @type {!Int32Array} */ + var HEAP32; + + /** @type {!Uint32Array} */ + var HEAPU32; + + /** not-@type {!BigInt64Array} */ + var HEAP64; var SYSCALLS = { - calculateAt(dirfd, path, allowEmpty) { + currentUmask:18, + calculateAt(dirfd, path, allowEmpty = false) { if (PATH.isAbs(path)) { return path; } @@ -3141,7 +3134,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // MAP_PRIVATE calls need not to be synced back to underlying fs return 0; } - var buffer = HEAPU8.slice(addr, addr + len); + var buffer = HEAPU8.subarray(addr, addr + len); FS.msync(stream, buffer, offset, len, flags); }, getStreamFromFD(fd) { @@ -3161,10 +3154,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.chmod(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_faccessat(dirfd, path, amode, flags) { try { @@ -3189,10 +3183,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchmod(fd, mode) { try { @@ -3200,10 +3195,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.fchmod(fd, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchown32(fd, owner, group) { try { @@ -3211,10 +3207,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.fchown(fd, owner, group); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var syscallGetVarargI = () => { // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. @@ -3225,6 +3222,9 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var syscallGetVarargP = syscallGetVarargI; + + /** @type {!Int16Array} */ + var HEAP16; function ___syscall_fcntl64(fd, cmd, varargs) { SYSCALLS.varargs = varargs; try { @@ -3250,7 +3250,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return stream.flags; case 4: { var arg = syscallGetVarargI(); - stream.flags |= arg; + var mask = 289792; + stream.flags = (stream.flags & ~mask) | (arg & mask); return 0; } case 12: { @@ -3270,20 +3271,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return -28; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fstat64(fd, buf) { try { return SYSCALLS.writeStat(buf, FS.fstat(fd)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var INT53_MAX = 9007199254740992; @@ -3295,35 +3298,42 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { - if (isNaN(length)) return -61; + if (isNaN(length)) return -22; FS.ftruncate(fd, length); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); }; function ___syscall_getcwd(buf, size) { try { - if (size === 0) return -28; + if (!size) return -28; var cwd = FS.cwd(); var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1; if (size < cwdLengthInBytes) return -68; stringToUTF8(cwd, buf, size); return cwdLengthInBytes; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + var ___syscall_geteuid32 = () => 0; + + + + function ___syscall_ioctl(fd, op, varargs) { SYSCALLS.varargs = varargs; @@ -3416,10 +3426,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { default: return -28; // not supported } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_lstat64(path, buf) { try { @@ -3427,23 +3438,26 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.lstat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_mkdirat(dirfd, path, mode) { try { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); - FS.mkdir(path, mode, 0); + mode &= ~SYSCALLS.currentUmask; + FS.mkdir(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_newfstatat(dirfd, path, buf, flags) { try { @@ -3455,10 +3469,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_openat(dirfd, path, flags, varargs) { @@ -3468,15 +3483,20 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); var mode = varargs ? syscallGetVarargI() : 0; + if (flags & 64) { + mode &= ~SYSCALLS.currentUmask; + } return FS.open(path, flags, mode).fd; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + function ___syscall_readlinkat(dirfd, path, buf, bufsize) { try { @@ -3493,10 +3513,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAP8[buf+len] = endChar; return len; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_rmdir(path) { try { @@ -3505,10 +3526,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.rmdir(path); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_stat64(path, buf) { try { @@ -3516,10 +3538,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_unlinkat(dirfd, path, flags) { try { @@ -3535,18 +3558,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + var readI53FromI64 = (ptr) => { return HEAPU32[((ptr)>>2)] + HEAP32[(((ptr)+(4))>>2)] * 4294967296; }; + function ___syscall_utimensat(dirfd, path, times, flags) { try { + var nofollow = flags & 256; path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path, true); var now = Date.now(), atime, mtime; @@ -3554,37 +3581,32 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { atime = now; mtime = now; } else { - var seconds = readI53FromI64(times); - var nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - atime = now; - } else if (nanoseconds == 1073741822) { - atime = null; - } else { - atime = (seconds*1000) + (nanoseconds/(1000*1000)); - } - times += 16; - seconds = readI53FromI64(times); - nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - mtime = now; - } else if (nanoseconds == 1073741822) { - mtime = null; - } else { - mtime = (seconds*1000) + (nanoseconds/(1000*1000)); + function readTimespec(ptr) { + var tv_nsec = HEAP32[(((ptr)+(8))>>2)]; + if (tv_nsec == 1073741823) { + return now; + } + if (tv_nsec == 1073741822) { + return null; + } + var tv_sec = readI53FromI64(ptr); + return (tv_sec*1000) + Math.floor(tv_nsec/(1000*1000)); } + atime = readTimespec(times); + mtime = readTimespec(times + 16); } // null here means UTIME_OMIT was passed. If both were set to UTIME_OMIT then // we can skip the call completely. if ((mtime ?? atime) !== null) { - FS.utime(path, atime, mtime); + FS.utime(path, atime, mtime, nofollow); } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); @@ -3599,11 +3621,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return yday; }; + function __localtime_js(time, tmPtr) { time = bigintToI53Checked(time); var date = new Date(time*1000); + if (isNaN(date.getTime())) { + return 1; + } HEAP32[((tmPtr)>>2)] = date.getSeconds(); HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); @@ -3622,6 +3648,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var winterOffset = start.getTimezoneOffset(); var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; HEAP32[(((tmPtr)+(32))>>2)] = dst; + return 0; ; } @@ -3630,6 +3657,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + + function __mmap_js(len, prot, flags, fd, offset, allocated, addr) { offset = bigintToI53Checked(offset); @@ -3643,7 +3672,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((addr)>>2)] = ptr; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; @@ -3661,12 +3690,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { SYSCALLS.doMsync(addr, stream, len, flags, offset); } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { // TODO: Use (malleable) environment variables instead of system settings. var currentYear = new Date().getFullYear(); @@ -3695,11 +3726,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var extractZone = (timezoneOffset) => { // Why inverse sign? // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset - var sign = timezoneOffset >= 0 ? "-" : "+"; + var sign = timezoneOffset >= 0 ? '-' : '+'; var absOffset = Math.abs(timezoneOffset) - var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); - var minutes = String(absOffset % 60).padStart(2, "0"); + var hours = String(Math.floor(absOffset / 60)).padStart(2, '0'); + var minutes = String(absOffset % 60).padStart(2, '0'); return `UTC${sign}${hours}${minutes}`; } @@ -3724,6 +3755,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3; + function _clock_time_get(clk_id, ignored_precision, ptime) { ignored_precision = bigintToI53Checked(ignored_precision); @@ -3741,7 +3773,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return 52; } // "now" is in ms, and wasi times are in ns. - var nsec = Math.round(now * 1000 * 1000); + var nsec = Math.round(now * 1_000_000); HEAP64[((ptime)>>3)] = BigInt(nsec); return 0; ; @@ -3769,9 +3801,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return 1 /*success*/; } catch(e) { } - // implicit 0 return to save code size (caller will cast "undefined" into 0 + // implicit 0 return to save code size (caller will cast 'undefined' into 0 // anyhow) }; + var _emscripten_resize_heap = (requestedSize) => { var oldSize = HEAPU8.length; // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. @@ -3825,11 +3858,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var ENV = { }; - var getExecutableName = () => thisProgram || './this.program'; + var getExecutableName = () => thisProgram; var getEnvStrings = () => { if (!getEnvStrings.strings) { // Default values. - // Browser language detection #8751 var lang = (globalThis.navigator?.language ?? 'C').replace('-', '_') + '.UTF-8'; var env = { 'USER': 'web_user', @@ -3857,6 +3889,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return getEnvStrings.strings; }; + var _environ_get = (__environ, environ_buf) => { var bufSize = 0; var envp = 0; @@ -3870,6 +3903,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; + var _environ_sizes_get = (penviron_count, penviron_buf_size) => { var strings = getEnvStrings(); HEAPU32[((penviron_count)>>2)] = strings.length; @@ -3888,11 +3922,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.close(stream); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + function _fd_fdstat_get(fd, pbuf) { try { @@ -3914,11 +3952,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + /** @param {number=} offset */ var doReadv = (stream, iov, iovcnt, offset) => { var ret = 0; @@ -3926,17 +3966,29 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; iov += 8; - var curr = FS.read(stream, HEAP8, ptr, len, offset); + try { + var curr = FS.read(stream, HEAP8, ptr, len, offset); + } catch (e) { + // On a non-blocking stream a subsequent read may would-block after we + // already gathered data. POSIX readv is a single gather-read: return + // what we have rather than failing the whole call. + if (ret > 0 && e instanceof FS.ErrnoError && + (e.errno == 6 || e.errno == 6)) { + break; + } + throw e; + } if (curr < 0) return -1; ret += curr; if (curr < len) break; // nothing more to read - if (typeof offset != 'undefined') { + if (typeof offset !== 'undefined') { offset += curr; } } return ret; }; + function _fd_read(fd, iov, iovcnt, pnum) { try { @@ -3945,26 +3997,28 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + function _fd_seek(fd, offset, whence, newOffset) { offset = bigintToI53Checked(offset); try { - if (isNaN(offset)) return 61; + if (isNaN(offset)) return 22; var stream = SYSCALLS.getStreamFromFD(fd); FS.llseek(stream, offset, whence); HEAP64[((newOffset)>>3)] = BigInt(stream.position); - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + if (stream.getdents && !offset && whence === 0) stream.getdents = null; // reset readdir state return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } ; @@ -3977,32 +4031,40 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var rtn = stream.stream_ops?.fsync?.(stream); return rtn; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + /** @param {number=} offset */ var doWritev = (stream, iov, iovcnt, offset) => { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { + // Gather all iovecs into one contiguous buffer and issue a single + // FS.write, matching POSIX writev's single gather-write semantics (as + // __syscall_sendmsg already does). Per-iovec writes fragment a stream + // socket send into multiple segments, breaking stream byte semantics. + if (iovcnt == 1) { + // Single iovec: write directly from HEAP8, no gather buffer needed. + return FS.write(stream, HEAP8, HEAPU32[((iov)>>2)], HEAPU32[(((iov)+(4))>>2)], offset); + } + var total = 0; + for (var i = 0, p = iov; i < iovcnt; i++, p += 8) { + total += HEAPU32[(((p)+(4))>>2)]; + } + var view = new Uint8Array(total); + var voff = 0; + for (var i = 0; i < iovcnt; i++, iov += 8) { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; - iov += 8; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) { - // No more space to write. - break; - } - if (typeof offset != 'undefined') { - offset += curr; - } + view.set(HEAPU8.subarray(ptr, ptr + len), voff); + voff += len; } - return ret; + return FS.write(stream, view, 0, total, offset); }; + function _fd_write(fd, iov, iovcnt, pnum) { try { @@ -4011,10 +4073,72 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + + + + /** @type {!Float32Array} */ + var HEAPF32; + + /** @type {!Float64Array} */ + var HEAPF64; + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + + + + + + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + + + FS.createPreloadedFile = FS_createPreloadedFile; @@ -4033,19 +4157,21 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // Begin ATMODULES hooks if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime']; -if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins']; + if (Module['print']) out = Module['print']; if (Module['printErr']) err = Module['printErr']; -if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; // End ATMODULES hooks - if (Module['arguments']) arguments_ = Module['arguments']; + if (Module['arguments']) programArgs = Module['arguments']; if (Module['thisProgram']) thisProgram = Module['thisProgram']; - if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].shift()(); + var preInit = Module['preInit']; + if (preInit) { + if (typeof preInit === 'function') Module['preInit'] = preInit = [preInit]; + // Written as a loop so that preInit functions that themselves add more + // preInit functions. Is this actually needed? + while (preInit.length > 0) { + preInit.shift()(); } } } @@ -4322,6 +4448,7 @@ var _sqlite3_status64, _free, _realloc, _emscripten_builtin_memalign, + _setThrew, __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, @@ -4591,6 +4718,7 @@ function assignWasmExports(wasmExports) { _free = Module['_free'] = wasmExports['free']; _realloc = Module['_realloc'] = wasmExports['realloc']; _emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign']; + _setThrew = wasmExports['setThrew']; __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; @@ -4615,6 +4743,8 @@ var wasmImports = { /** @export */ __syscall_getcwd: ___syscall_getcwd, /** @export */ + __syscall_geteuid32: ___syscall_geteuid32, + /** @export */ __syscall_ioctl: ___syscall_ioctl, /** @export */ __syscall_lstat64: ___syscall_lstat64, @@ -4676,55 +4806,38 @@ var wasmImports = { // include: postamble.js // === Auto-generated postamble setup entry stuff === -function run() { - - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } +async function run() { preRun(); - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; + if (runDependencies) { + await resolveRunDependencies(); } - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - Module['calledRun'] = true; - - if (ABORT) return; + var setStatus = Module['setStatus']; + if (setStatus) { + setStatus('Running...'); + // Yield to the event loop to allow the browser to paint "Running..." + await new Promise((resolve) => setTimeout(resolve, 1)); + // Then we want to clear the status text, but only after the rest of this function runs. + setTimeout(setStatus, 1, ''); + } - initRuntime(); + if (ABORT) return; - readyPromiseResolve?.(Module); - Module['onRuntimeInitialized']?.(); + initRuntime(); - postRun(); - } + Module['onRuntimeInitialized']?.(); - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(() => { - setTimeout(() => Module['setStatus'](''), 1); - doRun(); - }, 1); - } else - { - doRun(); - } + postRun(); } var wasmExports; // In modularize mode the generated code is within a factory function so we // can use await here (since it's not top-level-await). -wasmExports = await (createWasm()); - -run(); +wasmExports = await createWasm(); +await run(); // end include: postamble.js @@ -4804,7 +4917,7 @@ Module.runSQLite3PostLoadInit = async function( ** SQLITE_VERSION_NUMBER 3054001 ** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Emscripten SDK: 5.0.5 +** Emscripten SDK: 6.0.13 */ /* 2022-05-22 @@ -16305,25 +16418,12 @@ try{ // include: postamble_modularize.js // In MODULARIZE mode we wrap the generated code in a factory function // and return either the Module itself, or a promise of the module. -// -// We assign to the `moduleRtn` global here and configure closure to see -// this as an extern so it won't get minified. - -if (runtimeInitialized) { - moduleRtn = Module; -} else { - // Set up the promise that indicates the Module is initialized - moduleRtn = new Promise((resolve, reject) => { - readyPromiseResolve = resolve; - readyPromiseReject = reject; - }); -} // end include: postamble_modularize.js - return moduleRtn; + return Module; } // Export using a UMD style export, or ES6 exports if selected diff --git a/src/bin/sqlite3.mjs b/src/bin/sqlite3.mjs index 8936330..09b4712 100644 --- a/src/bin/sqlite3.mjs +++ b/src/bin/sqlite3.mjs @@ -31,7 +31,7 @@ ** SQLITE_VERSION_NUMBER 3054001 ** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Emscripten SDK: 5.0.5 +** Emscripten SDK: 6.0.13 */ // This code implements the `-sMODULARIZE` settings by taking the generated // JS program code (INNER_JS_CODE) and wrapping it in a factory function. @@ -39,8 +39,7 @@ // When targeting node and ES6 we use `await import ..` in the generated code // so the outer function needs to be marked as async. async function sqlite3InitModule(moduleArg = {}) { - var moduleRtn; - + var Module = moduleArg; // include: shell.js // include: minimum_runtime_check.js // end include: minimum_runtime_check.js @@ -57,7 +56,6 @@ async function sqlite3InitModule(moduleArg = {}) { // after the generated code, you will need to define var Module = {}; // before the code. Then that object will be used in the code, and you // can continue to use Module afterwards as well. -var Module = moduleArg; // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). @@ -189,7 +187,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR // end include: ./bld/pre-js.esm.js -var arguments_ = []; +var programArgs = []; var thisProgram = './this.program'; var quit_ = (status, toThrow) => { throw toThrow; @@ -299,8 +297,6 @@ function assert(condition, text) { var isFileURI = (filename) => filename.startsWith('file://'); // include: runtime_common.js -// include: runtime_stack_check.js -// end include: runtime_stack_check.js // include: runtime_exceptions.js // Base Emscripten EH error class class EmscriptenEH {} @@ -310,34 +306,39 @@ class EmscriptenSjLj extends EmscriptenEH {} // end include: runtime_exceptions.js // include: runtime_debug.js // end include: runtime_debug.js -var readyPromiseResolve, readyPromiseReject; - // Memory management var runtimeInitialized = false; +// When ALLOW_MEMORY_GROWTH is enabled, the conversion from Wasm +// memory to ArrayBuffer requires some additional logic. +function getMemoryBuffer() { + return wasmMemory.buffer; +} + function updateMemoryViews() { - var b = wasmMemory.buffer; + // If we already have a heap that is resizeable/growable buffer we don't + // need to do anything in updateMemoryViews. + if (HEAP8?.buffer?.resizable) return; + var b = getMemoryBuffer(); HEAP8 = new Int8Array(b); HEAP16 = new Int16Array(b); HEAPU8 = new Uint8Array(b); - HEAPU16 = new Uint16Array(b); + HEAP32 = new Int32Array(b); HEAPU32 = new Uint32Array(b); HEAPF32 = new Float32Array(b); HEAPF64 = new Float64Array(b); HEAP64 = new BigInt64Array(b); - HEAPU64 = new BigUint64Array(b); + } // In non-standalone/normal mode, we create the memory here. // include: runtime_init_memory.js // Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined) -// check for full engine support (use string 'subarray' to avoid closure compiler confusion) - function initMemory() { @@ -369,11 +370,10 @@ function initMemory() { // end include: memoryprofiler.js // end include: runtime_common.js function preRun() { - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } + var preRun = Module['preRun']; + if (preRun) { + if (typeof preRun === 'function') preRun = [preRun]; + onPreRuns.push(...preRun); } // Begin ATPRERUNS hooks callRuntimeCallbacks(onPreRuns); @@ -393,16 +393,15 @@ TTY.init(); // Begin ATPOSTCTORS hooks FS.ignorePermissions = false; // End ATPOSTCTORS hooks + } function postRun() { - // PThreads reuse the runtime from the main thread. - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } + var postRun = Module['postRun']; + if (postRun) { + if (typeof postRun === 'function') postRun = [postRun]; + onPostRuns.push(...postRun); } // Begin ATPOSTRUNS hooks @@ -412,7 +411,6 @@ function postRun() { /** * @param {string|number=} what - * @noreturn */ function abort(what) { Module['onAbort']?.(what); @@ -434,19 +432,7 @@ function abort(what) { // a trap or not based on a hidden field within the object. So at the moment // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that // allows this in the wasm spec. - - // Suppress closure compiler warning here. Closure compiler's builtin extern - // definition for WebAssembly.RuntimeError claims it takes no arguments even - // though it can. - // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. - /** @suppress {checkTypes} */ - var e = new WebAssembly.RuntimeError(what); - - readyPromiseReject?.(e); - // Throw the error whether or not MODULARIZE is set because abort is used - // in code paths apart from instantiation where an exception is expected - // to be thrown when abort is called. - throw e; + throw new WebAssembly.RuntimeError(what); } var wasmBinaryFile; @@ -463,9 +449,6 @@ function findWasmBinary() { } function getBinarySync(file) { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } if (readBinary) { return readBinary(file); } @@ -535,8 +518,7 @@ async function createWasm() { // Load the wasm module and create an instance of using native support in the JS engine. // handle a generated wasm instance, receiving its exports and // performing other necessary setup - /** @param {WebAssembly.Module=} module*/ - function receiveInstance(instance, module) { + function receiveInstance(instance) { wasmExports = instance.exports; assignWasmExports(wasmExports); @@ -561,11 +543,10 @@ async function createWasm() { // performing. // Also pthreads and wasm workers initialize the wasm instance through this // path. - if (Module['instantiateWasm']) { - return new Promise((resolve, reject) => { - Module['instantiateWasm'](info, (inst, mod) => { - resolve(receiveInstance(inst, mod)); - }); + var instantiateWasm = Module['instantiateWasm']; + if (instantiateWasm) { + return new Promise((resolve) => { + instantiateWasm(info, (inst) => resolve(receiveInstance(inst))); }); } @@ -588,36 +569,9 @@ async function createWasm() { } } - /** @type {!Int16Array} */ - var HEAP16; - - /** @type {!Int32Array} */ - var HEAP32; - - /** not-@type {!BigInt64Array} */ - var HEAP64; - /** @type {!Int8Array} */ var HEAP8; - /** @type {!Float32Array} */ - var HEAPF32; - - /** @type {!Float64Array} */ - var HEAPF64; - - /** @type {!Uint16Array} */ - var HEAPU16; - - /** @type {!Uint32Array} */ - var HEAPU32; - - /** not-@type {!BigUint64Array} */ - var HEAPU64; - - /** @type {!Uint8Array} */ - var HEAPU8; - var callRuntimeCallbacks = (callbacks) => { while (callbacks.length > 0) { // Pass the module as the first argument. @@ -631,49 +585,8 @@ async function createWasm() { var addOnPreRun = (cb) => onPreRuns.push(cb); - - /** - * @param {number} ptr - * @param {string} type - */ - function getValue(ptr, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': return HEAP8[ptr]; - case 'i8': return HEAP8[ptr]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP64[((ptr)>>3)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - case '*': return HEAPU32[((ptr)>>2)]; - default: abort(`invalid type for getValue: ${type}`); - } - } - var noExitRuntime = true; - - /** - * @param {number} ptr - * @param {number} value - * @param {string} type - */ - function setValue(ptr, value, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': HEAP8[ptr] = value; break; - case 'i8': HEAP8[ptr] = value; break; - case 'i16': HEAP16[((ptr)>>1)] = value; break; - case 'i32': HEAP32[((ptr)>>2)] = value; break; - case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; - case 'float': HEAPF32[((ptr)>>2)] = value; break; - case 'double': HEAPF64[((ptr)>>3)] = value; break; - case '*': HEAPU32[((ptr)>>2)] = value; break; - default: abort(`invalid type for setValue: ${type}`); - } - } - var stackRestore = (val) => __emscripten_stack_restore(val); var stackSave = () => _emscripten_stack_get_current(); @@ -756,7 +669,7 @@ resolve:(...args) => { for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? args[i] : FS.cwd(); // Skip empty and invalid entries - if (typeof path != 'string') { + if (typeof path !== 'string') { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { return ''; // an invalid portion invalidates the whole thing @@ -806,18 +719,26 @@ relative:(from, to) => { var UTF8Decoder = new TextDecoder(); -var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { - var maxIdx = idx + maxBytesToRead; - if (ignoreNul) return maxIdx; - // TextDecoder needs to know the byte length in advance, it doesn't stop on - // null terminator by itself. - // As a tiny code save trick, compare idx against maxIdx using a negation, - // so that maxBytesToRead=undefined/NaN means Infinity. - while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; - return idx; - }; /** + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @param {boolean=} ignoreNul + * @return {number} + */ + var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + var maxIdx = idx + maxBytesToRead; + if (ignoreNul) return maxIdx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. + // As a tiny code save trick, compare idx against maxIdx using a negation, + // so that maxBytesToRead=undefined/NaN means Infinity. + while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; + return idx; + }; + + /** * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given * array that contains uint8 values, returns a copy of that string as a * Javascript String object. @@ -978,12 +899,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; bytesRead++; buffer[offset+i] = result; + // We currently only support canonical mode (ICANON), where + // read(2) returns as soon as a line delimiter is read. + if (result === 10) break; } if (bytesRead) { stream.node.atime = Date.now(); @@ -1066,6 +990,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; + /** @type {!Uint8Array} */ + var HEAPU8; var zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size); var alignMemory = (size, alignment) => { @@ -1077,12 +1003,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (ptr) zeroMemory(ptr, size); return ptr; }; + var MEMFS = { ops_table:null, mount(mount) { return MEMFS.createNode(null, '/', 16895, 0); }, - createNode(parent, name, mode, dev) { + createNode(parent, name, mode, dev = undefined) { if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { // not supported throw new FS.ErrnoError(63); @@ -1175,7 +1102,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // For small filesizes (<1MB), perform size*2 geometric increase, but for // large sizes, do a much more conservative size*1.125 increase to avoid // overshooting the allocation cap by a very large margin. - var CAPACITY_DOUBLING_MAX = 1024 * 1024; + const CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); if (prevCapacity) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. var oldContents = MEMFS.getFileDataAsTypedArray(node); @@ -1219,7 +1146,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return attr; }, setattr(node, attr) { - for (const key of ["mode", "atime", "mtime", "ctime"]) { + for (const key of ['mode', 'atime', 'mtime', 'ctime']) { if (attr[key] != null) { node[key] = attr[key]; } @@ -1238,7 +1165,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } throw MEMFS.doesNotExistError; }, - mknod(parent, name, mode, dev) { + mknod(parent, name, mode, dev = undefined) { return MEMFS.createNode(parent, name, mode, dev); }, rename(old_node, new_dir, new_name) { @@ -1246,14 +1173,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { new_node = FS.lookupNode(new_dir, new_name); } catch (e) {} - if (new_node) { - if (FS.isDir(old_node.mode)) { - // if we're overwriting a directory at new_name, make sure it's empty. - for (var i in new_node.contents) { - throw new FS.ErrnoError(55); - } + if (new_node && FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); } - FS.hashRemoveNode(new_node); } // do the internal rewiring delete old_node.parent.contents[old_node.name]; @@ -1312,7 +1236,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (canOwn) { node.contents = buffer.subarray(offset, offset + length); node.usedBytes = length; - } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + } else if (!node.usedBytes && !position) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. node.contents = buffer.slice(offset, offset + length); node.usedBytes = length; } else { @@ -1379,7 +1303,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; var FS_modeStringToFlags = (str) => { - if (typeof str != 'string') return str; + if (typeof str !== 'string') return str; var flagModes = { 'r': 0, 'r+': 2, @@ -1389,14 +1313,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { 'a+': 1024 | 64 | 2, }; var flags = flagModes[str]; - if (typeof flags == 'undefined') { + if (typeof flags === 'undefined') { throw new Error(`Unknown file open mode: ${str}`); } return flags; }; var FS_fileDataToTypedArray = (data) => { - if (typeof data == 'string') { + if (typeof data === 'string') { data = intArrayFromString(data, true); } if (!data.subarray) { @@ -1425,24 +1349,27 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return id; }; + var dependenciesPromise = null; + var resolveRunDependencies = async () => dependenciesPromise; var runDependencies = 0; - var dependenciesFulfilled = null; + var dependenciesPromiseResolve = null; var removeRunDependency = (id) => { runDependencies--; Module['monitorRunDependencies']?.(runDependencies); - if (runDependencies == 0) { - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } + if (!runDependencies) { + dependenciesPromiseResolve(); } }; + + var addRunDependency = (id) => { + if (!runDependencies) { + dependenciesPromise = new Promise((resolve) => dependenciesPromiseResolve = resolve); + } runDependencies++; Module['monitorRunDependencies']?.(runDependencies); @@ -1453,7 +1380,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var preloadPlugins = []; var FS_handledByPreloadPlugin = async (byteArray, fullname) => { // Ensure plugins are ready. - if (typeof Browser != 'undefined') Browser.init(); + if (typeof Browser !== 'undefined') Browser.init(); for (var plugin of preloadPlugins) { if (plugin['canHandle'](fullname)) { @@ -1473,7 +1400,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { var byteArray = url; - if (typeof url == 'string') { + if (typeof url === 'string') { byteArray = await asyncLoad(url); } @@ -1489,6 +1416,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); }; + var FS = { root:null, mounts:[], @@ -1496,11 +1424,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }, streams:[], nextInode:1, - nameTable:null, + nameTable:[], currentPath:"/", initialized:false, ignorePermissions:true, - filesystems:null, syncFSRequests:0, ErrnoError:class { name = 'ErrnoError'; @@ -1580,6 +1507,48 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { get isDevice() { return FS.isChrdev(this.mode); } + // The per-inode readiness wait-queue. The node carries a Set of listener + // entries {cb}; producers (SOCKFS, PIPEFS) call notifyListeners on a + // readiness transition, and poll()/epoll consume it. It lives on the node + // (not the fd) so dup'd fds share one queue. Only nodes that derive real + // readiness (sockets, pipes, and an epoll's own node) ever use this - + // always-ready types (regular files, ttys) never register or notify. + addListener(cb, exclusive = false) { + var entry = {cb, exclusive}; + var listeners = (this.listeners ??= new Set()); + listeners.add(entry); + return {listeners, entry}; + } + notifyListeners(flags) { + // Iterates the set without copying, which is safe ONLY under a + // load-bearing contract that every internal listener must honour: + // 1. A listener must not run user code synchronously (a poll waiter only + // resolves a Promise; an epoll registration only re-lists + + // re-notifies; the epoll callback only schedules a tick). User code + // runs on a later tick, never inside this loop. + // 2. A listener may delete entries only from ITS OWN waiter, never from + // a sibling node's set that may be mid-iteration. (Deleting an entry + // of the set being iterated here is fine - a Set tolerates removal of + // a not-yet-visited entry mid-iteration; mutating a *different* node's + // set is fine because that set is not being iterated.) + // Violating either gives silently skipped wakeups that are near-impossible + // to reproduce. Any new producer/listener must preserve it. + if (!this.listeners) return; + // Fire every non-exclusive listener. Among EPOLLEXCLUSIVE registrations + // (one fd watched by several epolls) wake only one, rotating round-robin + // per node, to avoid a thundering herd. (Only epoll registrations are ever + // exclusive; poll waiters and a node's own consumers are not.) + var excl; + for (var entry of this.listeners) { + if (entry.exclusive) (excl ||= []).push(entry); + else entry.cb(flags); + } + if (excl) { + var i = (this.exclTurn || 0) % excl.length; + this.exclTurn = i + 1; + excl[i].cb(flags); + } + } }, lookupPath(path, opts = {}) { if (!path) { @@ -1591,7 +1560,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = FS.cwd() + '/' + path; } - // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + // limit max consecutive symlinks to SYMLOOP_MAX. linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { // split the absolute path var parts = path.split('/').filter((p) => !!p); @@ -1716,7 +1685,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // if we failed to find it in the cache, call into the VFS return FS.lookup(parent, name); }, - createNode(parent, name, mode, rdev) { + createNode(parent, name, mode, rdev = undefined) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); @@ -1881,7 +1850,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var arg = setattr ? stream : node; setattr ??= node.node_ops.setattr; FS.checkOpExists(setattr, 63) - setattr(arg, attr); + try { + setattr(arg, attr); + } catch (e) { + if (e instanceof RangeError) { + throw new FS.ErrnoError(22); + } + throw e; + } }, chrdev_stream_ops:{ open(stream) { @@ -1917,7 +1893,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return mounts; }, syncfs(populate, callback) { - if (typeof populate == 'function') { + if (typeof populate === 'function') { callback = populate; populate = false; } @@ -2075,9 +2051,9 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var rtn = { bsize: 4096, frsize: 4096, - blocks: 1e6, - bfree: 5e5, - bavail: 5e5, + blocks: 1_000_000, + bfree: 500_000, + bavail: 500_000, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, @@ -2100,7 +2076,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { mode |= 16384; return FS.mknod(path, mode, 0); }, - mkdirTree(path, mode) { + mkdirTree(path, mode = 0o777) { var dirs = path.split('/'); var d = ''; for (var dir of dirs) { @@ -2114,8 +2090,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - mkdev(path, mode, dev) { - if (typeof dev == 'undefined') { + mkdev(path, mode, dev = undefined) { + if (typeof dev === 'undefined') { dev = mode; mode = 0o666; } @@ -2141,6 +2117,25 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return parent.node_ops.symlink(parent, newname, oldpath); }, + link(oldpath, newpath, flags) { + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // Hardlinks are only supported by filesystem backends that provide a + // `link` node op (e.g. NODERAWFS backed by the host). NODEFS omits it: + // a host hardlink cannot be confined to the mount root. + if (!parent.node_ops.link) { + throw new FS.ErrnoError(34); + } + return parent.node_ops.link(parent, newname, oldpath, flags); + }, rename(old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); @@ -2215,6 +2210,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // do the underlying fs rename try { old_dir.node_ops.rename(old_node, new_dir, new_name); + // The replaced node is stale now. Evict it only after the rename + // succeeded: backends like NODEFS report node.id as st_ino. + if (new_node) { + FS.hashRemoveNode(new_node); + } // update old node (we do this here to avoid each backend // needing to) old_node.parent = new_dir; @@ -2285,7 +2285,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return link.node_ops.readlink(link); }, - stat(path, dontFollow) { + stat(path, dontFollow = false) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; var getattr = FS.checkOpExists(node.node_ops.getattr, 63); @@ -2303,16 +2303,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { lstat(path) { return FS.stat(path, true); }, - doChmod(stream, node, mode, dontFollow) { + doChmod(stream, node, mode, dontFollow = false) { FS.doSetAttr(stream, node, { mode: (mode & 4095) | (node.mode & ~4095), ctime: Date.now(), dontFollow }); }, - chmod(path, mode, dontFollow) { + chmod(path, mode, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { @@ -2327,16 +2327,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var stream = FS.getStreamChecked(fd); FS.doChmod(stream, stream.node, mode, false); }, - doChown(stream, node, dontFollow) { + doChown(stream, node, dontFollow = false) { FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow // we ignore the uid / gid for now }); }, - chown(path, uid, gid, dontFollow) { + chown(path, uid, gid, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { @@ -2372,7 +2372,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { throw new FS.ErrnoError(28); } var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: true }); node = lookup.node; } else { @@ -2387,17 +2387,16 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } FS.doTruncate(stream, stream.node, len); }, - utime(path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - var setattr = FS.checkOpExists(node.node_ops.setattr, 63); - setattr(node, { + utime(path, atime, mtime, dontFollow = false) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + FS.doSetAttr(null, lookup.node, { atime: atime, - mtime: mtime + mtime: mtime, + dontFollow }); }, open(path, flags, mode = 0o666) { - if (path === "") { + if (path === '') { throw new FS.ErrnoError(44); } flags = FS_modeStringToFlags(flags); @@ -2408,10 +2407,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } var node; var isDirPath; - if (typeof path == 'object') { + if (typeof path === 'object') { node = path; } else { - isDirPath = path.endsWith("/"); + isDirPath = path.endsWith('/'); // noent_okay makes it so that if the final component of the path // doesn't exist, lookupPath returns `node: undefined`. `path` will be // updated to point to the target of all symlinks. @@ -2494,6 +2493,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { throw new FS.ErrnoError(8); } if (stream.getdents) stream.getdents = null; // free readdir state + // The fd is going away: wake anything waiting on it (poll/epoll) with + // POLLNVAL so a blocking wait unblocks and an epoll registration is evicted + // on its next derive. Only sockets/pipes/epoll ever carry a wait-queue, so + // for every other stream (incl. nodeless noderawfs stdio) this is a no-op. + stream.node?.notifyListeners(32); try { if (stream.stream_ops.close) { stream.stream_ops.close(stream); @@ -2522,7 +2526,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { stream.ungotten = []; return stream.position; }, - read(stream, buffer, offset, length, position) { + read(stream, buffer, offset, length, position = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2538,7 +2542,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (!stream.stream_ops.read) { throw new FS.ErrnoError(28); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2548,7 +2552,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { if (!seeking) stream.position += bytesRead; return bytesRead; }, - write(stream, buffer, offset, length, position, canOwn) { + write(stream, buffer, offset, length, position = undefined, canOwn = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2568,7 +2572,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // seek to the end before writing in append mode FS.llseek(stream, 0, 2); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2585,8 +2589,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // to write to file opened in read-only mode with MAP_PRIVATE flag, // as all modifications will be visible only in the memory of // the current process. - if ((prot & 2) !== 0 - && (flags & 2) === 0 + if ((prot & 2) + && !(flags & 2) && (stream.flags & 2097155) !== 2) { throw new FS.ErrnoError(2); } @@ -2614,8 +2618,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return stream.stream_ops.ioctl(stream, cmd, arg); }, readFile(path, opts = {}) { - opts.flags = opts.flags || 0; - opts.encoding = opts.encoding || 'binary'; + opts.flags ??= 0; + opts.encoding ??= 'binary'; if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { abort(`Invalid encoding type "${opts.encoding}"`); } @@ -2631,7 +2635,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return buf; }, writeFile(path, data, opts = {}) { - opts.flags = opts.flags || 577; + opts.flags ??= 577; var stream = FS.open(path, opts.flags, opts.mode); data = FS_fileDataToTypedArray(data); FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); @@ -2678,7 +2682,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // use a buffer to avoid overhead of individual crypto calls per byte var randomBuffer = new Uint8Array(1024), randomLeft = 0; var randomByte = () => { - if (randomLeft === 0) { + if (!randomLeft) { randomFill(randomBuffer); randomLeft = randomBuffer.byteLength; } @@ -2757,19 +2761,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var stderr = FS.open('/dev/stderr', 1); }, staticInit() { - FS.nameTable = new Array(4096); + FS.nameTable.length = 4096; FS.mount(MEMFS, {}, '/'); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); - - FS.filesystems = { - 'MEMFS': MEMFS, - }; }, - init(input, output, error) { + init(input = undefined, output = undefined, error = undefined) { FS.initialized = true; // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here @@ -2789,14 +2789,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - findObject(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (!ret.exists) { - return null; - } - return ret.object; - }, - analyzePath(path, dontResolveLastLink) { + analyzePath(path, dontResolveLastLink = false) { // operate from within the context of the symlink's target try { var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); @@ -2824,8 +2817,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; return ret; }, - createPath(parent, path, canRead, canWrite) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + createPath(parent, path, canRead = undefined, canWrite = undefined) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); var parts = path.split('/').reverse(); while (parts.length) { var part = parts.pop(); @@ -2840,15 +2833,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return current; }, - createFile(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createFile(parent, name, properties, canRead = undefined, canWrite = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(canRead, canWrite); return FS.create(path, mode); }, - createDataFile(parent, name, data, canRead, canWrite, canOwn) { + createDataFile(parent, name, data = undefined, canRead = undefined, canWrite = undefined, canOwn = undefined) { var path = name; if (parent) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + parent = typeof parent === 'string' ? parent : FS.getPath(parent); path = name ? PATH.join2(parent, name) : parent; } var mode = FS_getMode(canRead, canWrite); @@ -2863,8 +2856,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.chmod(node, mode); } }, - createDevice(parent, name, input, output) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createDevice(parent, name, input = undefined, output = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(!!input, !!output); FS.createDevice.major ??= 64; var dev = FS.makedev(FS.createDevice.major++, 0); @@ -2889,7 +2882,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; @@ -2920,7 +2913,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { forceLoadFile(obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; if (globalThis.XMLHttpRequest) { - abort("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + abort('Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.'); } else { // Command-line. try { obj.contents = readBinary(obj.url); @@ -2929,7 +2922,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } } }, - createLazyFile(parent, name, url, canRead, canWrite) { + createLazyFile(parent, name, url, canRead = undefined, canWrite = undefined) { // Lazy chunked Uint8Array (implements get and length from Uint8Array). // Actual getting is abstracted away for eventual reuse. class LazyUint8Array { @@ -2951,11 +2944,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var xhr = new XMLHttpRequest(); xhr.open('HEAD', url, false); xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); + var datalength = Number(xhr.getResponseHeader('Content-length')); var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes'; + var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip'; var chunkSize = 1024*1024; // Chunk size in bytes @@ -2963,13 +2956,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // Function to get a range from the remote URL. var doXHR = (from, to) => { - if (from > to) abort("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength-1) abort("only " + datalength + " bytes available! programmer error!"); + if (from > to) abort(`invalid range (${from}, ${to}) or no bytes requested!`); + if (to > datalength-1) abort(`only ${datalength} bytes available! programmer error!`); // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + if (datalength !== chunkSize) xhr.setRequestHeader('Range', `bytes=${from}-${to}`); // Some hints to the browser that we want binary data. xhr.responseType = 'arraybuffer'; @@ -2978,21 +2971,21 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort("Couldn't load " + url + ". Status: " + xhr.status); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); if (xhr.response !== undefined) { return new Uint8Array(/** @type{Array} */(xhr.response || [])); } - return intArrayFromString(xhr.responseText || '', true); + return intArrayFromString(xhr.responseText ?? '', true); }; var lazyArray = this; lazyArray.setDataGetter((chunkNum) => { var start = chunkNum * chunkSize; var end = (chunkNum+1) * chunkSize - 1; // including this byte end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block - if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + if (typeof lazyArray.chunks[chunkNum] === 'undefined') { lazyArray.chunks[chunkNum] = doXHR(start, end); } - if (typeof lazyArray.chunks[chunkNum] == 'undefined') abort('doXHR failed!'); + if (typeof lazyArray.chunks[chunkNum] === 'undefined') abort('doXHR failed!'); return lazyArray.chunks[chunkNum]; }); @@ -3001,7 +2994,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file datalength = this.getter(0).length; chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed"); + out('LazyFiles on gzip forces download of the whole file when length is accessed'); } this._length = datalength; @@ -3092,6 +3085,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + /** * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the * emscripten HEAP, returns a copy of that string as a Javascript String object. @@ -3110,8 +3104,19 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var end = findStringEnd(HEAPU8, ptr, maxBytesToRead, ignoreNul); return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); }; + + + /** @type {!Int32Array} */ + var HEAP32; + + /** @type {!Uint32Array} */ + var HEAPU32; + + /** not-@type {!BigInt64Array} */ + var HEAP64; var SYSCALLS = { - calculateAt(dirfd, path, allowEmpty) { + currentUmask:18, + calculateAt(dirfd, path, allowEmpty = false) { if (PATH.isAbs(path)) { return path; } @@ -3173,7 +3178,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // MAP_PRIVATE calls need not to be synced back to underlying fs return 0; } - var buffer = HEAPU8.slice(addr, addr + len); + var buffer = HEAPU8.subarray(addr, addr + len); FS.msync(stream, buffer, offset, len, flags); }, getStreamFromFD(fd) { @@ -3193,10 +3198,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.chmod(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_faccessat(dirfd, path, amode, flags) { try { @@ -3221,10 +3227,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchmod(fd, mode) { try { @@ -3232,10 +3239,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.fchmod(fd, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchown32(fd, owner, group) { try { @@ -3243,10 +3251,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.fchown(fd, owner, group); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var syscallGetVarargI = () => { // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. @@ -3257,6 +3266,9 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var syscallGetVarargP = syscallGetVarargI; + + /** @type {!Int16Array} */ + var HEAP16; function ___syscall_fcntl64(fd, cmd, varargs) { SYSCALLS.varargs = varargs; try { @@ -3282,7 +3294,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return stream.flags; case 4: { var arg = syscallGetVarargI(); - stream.flags |= arg; + var mask = 289792; + stream.flags = (stream.flags & ~mask) | (arg & mask); return 0; } case 12: { @@ -3302,20 +3315,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return -28; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fstat64(fd, buf) { try { return SYSCALLS.writeStat(buf, FS.fstat(fd)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var INT53_MAX = 9007199254740992; @@ -3327,36 +3342,43 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { try { - if (isNaN(length)) return -61; + if (isNaN(length)) return -22; FS.ftruncate(fd, length); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); }; function ___syscall_getcwd(buf, size) { try { - if (size === 0) return -28; + if (!size) return -28; var cwd = FS.cwd(); var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1; if (size < cwdLengthInBytes) return -68; stringToUTF8(cwd, buf, size); return cwdLengthInBytes; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + + var ___syscall_geteuid32 = () => 0; + + + function ___syscall_ioctl(fd, op, varargs) { SYSCALLS.varargs = varargs; try { @@ -3448,10 +3470,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { default: return -28; // not supported } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_lstat64(path, buf) { try { @@ -3459,23 +3482,26 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.lstat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_mkdirat(dirfd, path, mode) { try { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); - FS.mkdir(path, mode, 0); + mode &= ~SYSCALLS.currentUmask; + FS.mkdir(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_newfstatat(dirfd, path, buf, flags) { try { @@ -3487,10 +3513,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_openat(dirfd, path, flags, varargs) { @@ -3500,15 +3527,20 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); var mode = varargs ? syscallGetVarargI() : 0; + if (flags & 64) { + mode &= ~SYSCALLS.currentUmask; + } return FS.open(path, flags, mode).fd; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + function ___syscall_readlinkat(dirfd, path, buf, bufsize) { try { @@ -3525,10 +3557,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAP8[buf+len] = endChar; return len; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_rmdir(path) { try { @@ -3537,10 +3570,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.rmdir(path); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_stat64(path, buf) { try { @@ -3548,10 +3582,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { path = SYSCALLS.getStr(path); return SYSCALLS.writeStat(buf, FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_unlinkat(dirfd, path, flags) { try { @@ -3567,18 +3602,22 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + var readI53FromI64 = (ptr) => { return HEAPU32[((ptr)>>2)] + HEAP32[(((ptr)+(4))>>2)] * 4294967296; }; + function ___syscall_utimensat(dirfd, path, times, flags) { try { + var nofollow = flags & 256; path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path, true); var now = Date.now(), atime, mtime; @@ -3586,37 +3625,32 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { atime = now; mtime = now; } else { - var seconds = readI53FromI64(times); - var nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - atime = now; - } else if (nanoseconds == 1073741822) { - atime = null; - } else { - atime = (seconds*1000) + (nanoseconds/(1000*1000)); - } - times += 16; - seconds = readI53FromI64(times); - nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - mtime = now; - } else if (nanoseconds == 1073741822) { - mtime = null; - } else { - mtime = (seconds*1000) + (nanoseconds/(1000*1000)); + function readTimespec(ptr) { + var tv_nsec = HEAP32[(((ptr)+(8))>>2)]; + if (tv_nsec == 1073741823) { + return now; + } + if (tv_nsec == 1073741822) { + return null; + } + var tv_sec = readI53FromI64(ptr); + return (tv_sec*1000) + Math.floor(tv_nsec/(1000*1000)); } + atime = readTimespec(times); + mtime = readTimespec(times + 16); } // null here means UTIME_OMIT was passed. If both were set to UTIME_OMIT then // we can skip the call completely. if ((mtime ?? atime) !== null) { - FS.utime(path, atime, mtime); + FS.utime(path, atime, mtime, nofollow); } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); @@ -3631,11 +3665,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return yday; }; + function __localtime_js(time, tmPtr) { time = bigintToI53Checked(time); var date = new Date(time*1000); + if (isNaN(date.getTime())) { + return 1; + } HEAP32[((tmPtr)>>2)] = date.getSeconds(); HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); @@ -3654,6 +3692,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var winterOffset = start.getTimezoneOffset(); var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; HEAP32[(((tmPtr)+(32))>>2)] = dst; + return 0; ; } @@ -3662,6 +3701,8 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + + function __mmap_js(len, prot, flags, fd, offset, allocated, addr) { offset = bigintToI53Checked(offset); @@ -3675,7 +3716,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((addr)>>2)] = ptr; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; @@ -3693,12 +3734,14 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { SYSCALLS.doMsync(addr, stream, len, flags, offset); } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { // TODO: Use (malleable) environment variables instead of system settings. var currentYear = new Date().getFullYear(); @@ -3727,11 +3770,11 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var extractZone = (timezoneOffset) => { // Why inverse sign? // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset - var sign = timezoneOffset >= 0 ? "-" : "+"; + var sign = timezoneOffset >= 0 ? '-' : '+'; var absOffset = Math.abs(timezoneOffset) - var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); - var minutes = String(absOffset % 60).padStart(2, "0"); + var hours = String(Math.floor(absOffset / 60)).padStart(2, '0'); + var minutes = String(absOffset % 60).padStart(2, '0'); return `UTC${sign}${hours}${minutes}`; } @@ -3756,6 +3799,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3; + function _clock_time_get(clk_id, ignored_precision, ptime) { ignored_precision = bigintToI53Checked(ignored_precision); @@ -3773,7 +3817,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return 52; } // "now" is in ms, and wasi times are in ns. - var nsec = Math.round(now * 1000 * 1000); + var nsec = Math.round(now * 1_000_000); HEAP64[((ptime)>>3)] = BigInt(nsec); return 0; ; @@ -3801,9 +3845,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return 1 /*success*/; } catch(e) { } - // implicit 0 return to save code size (caller will cast "undefined" into 0 + // implicit 0 return to save code size (caller will cast 'undefined' into 0 // anyhow) }; + var _emscripten_resize_heap = (requestedSize) => { var oldSize = HEAPU8.length; // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. @@ -3857,11 +3902,10 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var ENV = { }; - var getExecutableName = () => thisProgram || './this.program'; + var getExecutableName = () => thisProgram; var getEnvStrings = () => { if (!getEnvStrings.strings) { // Default values. - // Browser language detection #8751 var lang = (globalThis.navigator?.language ?? 'C').replace('-', '_') + '.UTF-8'; var env = { 'USER': 'web_user', @@ -3889,6 +3933,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { return getEnvStrings.strings; }; + var _environ_get = (__environ, environ_buf) => { var bufSize = 0; var envp = 0; @@ -3902,6 +3947,7 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { }; + var _environ_sizes_get = (penviron_count, penviron_buf_size) => { var strings = getEnvStrings(); HEAPU32[((penviron_count)>>2)] = strings.length; @@ -3920,11 +3966,15 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { FS.close(stream); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + function _fd_fdstat_get(fd, pbuf) { try { @@ -3946,11 +3996,13 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + /** @param {number=} offset */ var doReadv = (stream, iov, iovcnt, offset) => { var ret = 0; @@ -3958,17 +4010,29 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; iov += 8; - var curr = FS.read(stream, HEAP8, ptr, len, offset); + try { + var curr = FS.read(stream, HEAP8, ptr, len, offset); + } catch (e) { + // On a non-blocking stream a subsequent read may would-block after we + // already gathered data. POSIX readv is a single gather-read: return + // what we have rather than failing the whole call. + if (ret > 0 && e instanceof FS.ErrnoError && + (e.errno == 6 || e.errno == 6)) { + break; + } + throw e; + } if (curr < 0) return -1; ret += curr; if (curr < len) break; // nothing more to read - if (typeof offset != 'undefined') { + if (typeof offset !== 'undefined') { offset += curr; } } return ret; }; + function _fd_read(fd, iov, iovcnt, pnum) { try { @@ -3977,26 +4041,28 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + function _fd_seek(fd, offset, whence, newOffset) { offset = bigintToI53Checked(offset); try { - if (isNaN(offset)) return 61; + if (isNaN(offset)) return 22; var stream = SYSCALLS.getStreamFromFD(fd); FS.llseek(stream, offset, whence); HEAP64[((newOffset)>>3)] = BigInt(stream.position); - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + if (stream.getdents && !offset && whence === 0) stream.getdents = null; // reset readdir state return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } ; @@ -4009,32 +4075,40 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { var rtn = stream.stream_ops?.fsync?.(stream); return rtn; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + /** @param {number=} offset */ var doWritev = (stream, iov, iovcnt, offset) => { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { + // Gather all iovecs into one contiguous buffer and issue a single + // FS.write, matching POSIX writev's single gather-write semantics (as + // __syscall_sendmsg already does). Per-iovec writes fragment a stream + // socket send into multiple segments, breaking stream byte semantics. + if (iovcnt == 1) { + // Single iovec: write directly from HEAP8, no gather buffer needed. + return FS.write(stream, HEAP8, HEAPU32[((iov)>>2)], HEAPU32[(((iov)+(4))>>2)], offset); + } + var total = 0; + for (var i = 0, p = iov; i < iovcnt; i++, p += 8) { + total += HEAPU32[(((p)+(4))>>2)]; + } + var view = new Uint8Array(total); + var voff = 0; + for (var i = 0; i < iovcnt; i++, iov += 8) { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; - iov += 8; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) { - // No more space to write. - break; - } - if (typeof offset != 'undefined') { - offset += curr; - } + view.set(HEAPU8.subarray(ptr, ptr + len), voff); + voff += len; } - return ret; + return FS.write(stream, view, 0, total, offset); }; + function _fd_write(fd, iov, iovcnt, pnum) { try { @@ -4043,10 +4117,72 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + + + + /** @type {!Float32Array} */ + var HEAPF32; + + /** @type {!Float64Array} */ + var HEAPF64; + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + + + + + + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + + + FS.createPreloadedFile = FS_createPreloadedFile; @@ -4065,19 +4201,21 @@ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { // Begin ATMODULES hooks if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime']; -if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins']; + if (Module['print']) out = Module['print']; if (Module['printErr']) err = Module['printErr']; -if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; // End ATMODULES hooks - if (Module['arguments']) arguments_ = Module['arguments']; + if (Module['arguments']) programArgs = Module['arguments']; if (Module['thisProgram']) thisProgram = Module['thisProgram']; - if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].shift()(); + var preInit = Module['preInit']; + if (preInit) { + if (typeof preInit === 'function') Module['preInit'] = preInit = [preInit]; + // Written as a loop so that preInit functions that themselves add more + // preInit functions. Is this actually needed? + while (preInit.length > 0) { + preInit.shift()(); } } } @@ -4354,6 +4492,7 @@ var _sqlite3_status64, _free, _realloc, _emscripten_builtin_memalign, + _setThrew, __emscripten_stack_restore, __emscripten_stack_alloc, _emscripten_stack_get_current, @@ -4623,6 +4762,7 @@ function assignWasmExports(wasmExports) { _free = Module['_free'] = wasmExports['free']; _realloc = Module['_realloc'] = wasmExports['realloc']; _emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign']; + _setThrew = wasmExports['setThrew']; __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; @@ -4647,6 +4787,8 @@ var wasmImports = { /** @export */ __syscall_getcwd: ___syscall_getcwd, /** @export */ + __syscall_geteuid32: ___syscall_geteuid32, + /** @export */ __syscall_ioctl: ___syscall_ioctl, /** @export */ __syscall_lstat64: ___syscall_lstat64, @@ -4708,55 +4850,38 @@ var wasmImports = { // include: postamble.js // === Auto-generated postamble setup entry stuff === -function run() { - - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; - } +async function run() { preRun(); - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - dependenciesFulfilled = run; - return; + if (runDependencies) { + await resolveRunDependencies(); } - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - Module['calledRun'] = true; - - if (ABORT) return; + var setStatus = Module['setStatus']; + if (setStatus) { + setStatus('Running...'); + // Yield to the event loop to allow the browser to paint "Running..." + await new Promise((resolve) => setTimeout(resolve, 1)); + // Then we want to clear the status text, but only after the rest of this function runs. + setTimeout(setStatus, 1, ''); + } - initRuntime(); + if (ABORT) return; - readyPromiseResolve?.(Module); - Module['onRuntimeInitialized']?.(); + initRuntime(); - postRun(); - } + Module['onRuntimeInitialized']?.(); - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(() => { - setTimeout(() => Module['setStatus'](''), 1); - doRun(); - }, 1); - } else - { - doRun(); - } + postRun(); } var wasmExports; // In modularize mode the generated code is within a factory function so we // can use await here (since it's not top-level-await). -wasmExports = await (createWasm()); - -run(); +wasmExports = await createWasm(); +await run(); // end include: postamble.js @@ -4836,7 +4961,7 @@ Module.runSQLite3PostLoadInit = async function( ** SQLITE_VERSION_NUMBER 3054001 ** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Emscripten SDK: 5.0.5 +** Emscripten SDK: 6.0.13 */ /* 2022-05-22 @@ -21670,25 +21795,12 @@ try{ // include: postamble_modularize.js // In MODULARIZE mode we wrap the generated code in a factory function // and return either the Module itself, or a promise of the module. -// -// We assign to the `moduleRtn` global here and configure closure to see -// this as an extern so it won't get minified. - -if (runtimeInitialized) { - moduleRtn = Module; -} else { - // Set up the promise that indicates the Module is initialized - moduleRtn = new Promise((resolve, reject) => { - readyPromiseResolve = resolve; - readyPromiseReject = reject; - }); -} // end include: postamble_modularize.js - return moduleRtn; + return Module; } // Export using a UMD style export, or ES6 exports if selected diff --git a/src/bin/sqlite3.wasm b/src/bin/sqlite3.wasm index 2be0556ad829aa59bdcd3a19a688f38d131cf633..e7f85791c6f537c751770dbbf31d2c4f0a3e631c 100644 GIT binary patch delta 362241 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%0Du+BE>;;84LQi?hnnpVHxFj73 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

mM=c$})> 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 IPUEcq02ajywEzGB delta 348259 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
    l^%dQc81vw( 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 { copyFileSync('./src/bin/sqlite3.wasm', './dist/sqlite3.wasm'); - copyFileSync('./dist/bin/sqlite3-worker1.mjs', './dist/sqlite3-worker1.mjs'); }, }), defineConfig({ @@ -44,7 +43,6 @@ const tsdownConfig: UserConfig[] = [ onSuccess: () => { copyFileSync('./dist/sqlite3-opfs-async-proxy.iife.js', './dist/sqlite3-opfs-async-proxy.js'); rmSync('./dist/sqlite3-opfs-async-proxy.iife.js'); - rmSync('./dist/bin', { recursive: true, force: true }); }, }), ];