Skip to content

Commit 5b386e7

Browse files
authored
[WasmFS] Fix closure (#16075)
Add missing deps and clean up code. Ignore whitespace for a much smaller diff. Add a test to CI that runs closure, and fails before this PR.
1 parent a65d70c commit 5b386e7

File tree

2 files changed

+36
-33
lines changed

2 files changed

+36
-33
lines changed

.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ jobs:
384384
- run-tests:
385385
# also add a little select testing for wasm2js in -O3
386386
# also add a little select wasmfs testing
387-
test_targets: "core3 wasm2js3.test_memorygrowth_2 wasmfs.test_hello_world wasmfs.test_hello_world_standalone wasmfs.test_unistd_links* wasmfs.test_atexit_standalone"
387+
test_targets: "core3 wasm2js3.test_memorygrowth_2 wasmfs.test_hello_world wasmfs.test_hello_world_standalone wasmfs.test_unistd_links* wasmfs.test_atexit_standalone wasmfs.test_emscripten_get_now"
388388
test-wasm2js1:
389389
executor: bionic
390390
steps:

src/library_wasmfs.js

+35-32
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,47 @@ var WasmfsLibrary = {
33
$wasmFS$JSMemoryFreeList: [],
44
$wasmFS$preloadedFiles: [],
55
$wasmFS$preloadedDirs: [],
6-
$FS__deps: ['$wasmFS$preloadedFiles', '$wasmFS$preloadedDirs', '$wasmFS$JSMemoryFiles', '$wasmFS$JSMemoryFreeList'],
6+
$FS__deps: [
7+
'$wasmFS$preloadedFiles',
8+
'$wasmFS$preloadedDirs',
9+
'$wasmFS$JSMemoryFiles',
10+
'$wasmFS$JSMemoryFreeList',
11+
'$asyncLoad',
12+
// TODO: when preload-plugins are not used, we do not need this.
13+
'$Browser',
14+
],
715
$FS : {
816
// TODO: Clean up the following functions - currently copied from library_fs.js directly.
917
createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
10-
Browser.init();
11-
var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
12-
var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname
13-
function processData(byteArray) {
14-
function finish(byteArray) {
15-
if (preFinish) preFinish();
16-
if (!dontCreateFile) {
17-
FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
18-
}
19-
if (onload) onload();
20-
removeRunDependency(dep);
18+
// TODO: use WasmFS code to resolve and join the path here?
19+
var fullname = name ? parent + '/' + name : parent;
20+
var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname
21+
function processData(byteArray) {
22+
function finish(byteArray) {
23+
if (preFinish) preFinish();
24+
if (!dontCreateFile) {
25+
FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
2126
}
22-
var handled = false;
23-
Module['preloadPlugins'].forEach(function(plugin) {
24-
if (handled) return;
25-
if (plugin['canHandle'](fullname)) {
26-
plugin['handle'](byteArray, fullname, finish, function() {
27-
if (onerror) onerror();
28-
removeRunDependency(dep);
29-
});
30-
handled = true;
31-
}
32-
});
33-
if (!handled) finish(byteArray);
27+
if (onload) onload();
28+
removeRunDependency(dep);
3429
}
35-
addRunDependency(dep);
36-
if (typeof url == 'string') {
37-
asyncLoad(url, function(byteArray) {
38-
processData(byteArray);
39-
}, onerror);
40-
} else {
41-
processData(url);
30+
if (Browser.handledByPreloadPlugin(byteArray, fullname, finish, function() {
31+
if (onerror) onerror();
32+
removeRunDependency(dep);
33+
})) {
34+
return;
4235
}
43-
},
36+
finish(byteArray);
37+
}
38+
addRunDependency(dep);
39+
if (typeof url == 'string') {
40+
asyncLoad(url, function(byteArray) {
41+
processData(byteArray);
42+
}, onerror);
43+
} else {
44+
processData(url);
45+
}
46+
},
4447
getMode: function(canRead, canWrite) {
4548
var mode = 0;
4649
if (canRead) mode |= {{{ cDefine('S_IRUGO') }}} | {{{ cDefine('S_IXUGO') }}};

0 commit comments

Comments
 (0)