Skip to content

Commit 611b14a

Browse files
authored
[WasmFS] Support file embedding (#16105)
This practically worked since #16050, but the JS side needs to support a missing parent, which is how the file packager emits it. Fixes #16014
1 parent 4e130e4 commit 611b14a

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

src/library_wasmfs.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ var WasmfsLibrary = {
5050
createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
5151
// Data files must be cached until the file system itself has been initialized.
5252
var mode = FS.getMode(canRead, canWrite);
53-
wasmFS$preloadedFiles.push({pathName: parent, fileData: data, mode: mode});
53+
var pathName = name ? parent + '/' + name : parent;
54+
wasmFS$preloadedFiles.push({pathName: pathName, fileData: data, mode: mode});
5455
},
5556
createPath: function(parent, path, canRead, canWrite) {
5657
// Cache file path directory names.

tests/test_other.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -1502,7 +1502,11 @@ def test_include_file(self, args):
15021502
result = self.run_js('a.out.js', engine=config.NODE_JS)
15031503
self.assertContained('|hello from a file wi|', result)
15041504

1505-
def test_embed_file_dup(self):
1505+
@parameterized({
1506+
'': ([],),
1507+
'wasmfs': (['-sWASMFS'],),
1508+
})
1509+
def test_embed_file_dup(self, args):
15061510
ensure_dir(self.in_dir('tst', 'test1'))
15071511
ensure_dir(self.in_dir('tst', 'test2'))
15081512

@@ -1529,7 +1533,7 @@ def test_embed_file_dup(self):
15291533
}
15301534
''')
15311535

1532-
self.run_process([EMXX, 'main.cpp', '--embed-file', 'tst'])
1536+
self.run_process([EMXX, 'main.cpp', '--embed-file', 'tst'] + args)
15331537
self.assertContained('|frist|\n|sacond|\n|thard|\n', self.run_js('a.out.js'))
15341538

15351539
def test_exclude_file(self):

tools/file_packager.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ def generate_js(data_target, data_files, metadata):
649649
var content = HEAPU32[start32++];
650650
var name = UTF8ToString(name_addr)
651651
// canOwn this data in the filesystem, it is a slice of wasm memory that will never change
652-
Module['FS_createDataFile'](undefined, name, HEAP8.subarray(content, content + len), true, true, true);
652+
Module['FS_createDataFile'](name, null, HEAP8.subarray(content, content + len), true, true, true);
653653
} while (HEAPU32[start32]);'''
654654
else:
655655
err('--obj-output is recommended when using --embed. This outputs an object file for linking directly into your application is more effecient than JS encoding')

0 commit comments

Comments
 (0)