diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-08 20:35:37 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-08 20:35:37 -0700 |
commit | a7590b8609cc0597305171ff2489eda8c893ffbd (patch) | |
tree | 3455aa6f990c8ce0fb6099b0e267401c26cb6803 | |
parent | fe319edc466181f6c954360178dba280591e0c2f (diff) |
handle absolute paths in file preloading
-rwxr-xr-x | emcc | 3 | ||||
-rw-r--r-- | src/library.js | 6 | ||||
-rwxr-xr-x | tests/runner.py | 41 |
3 files changed, 31 insertions, 19 deletions
@@ -906,7 +906,8 @@ try: partial_dirs = [] for file_ in data_files: dirname = os.path.dirname(file_['name']) - if dirname != '' and dirname != '/': + dirname = dirname.lstrip('/') # absolute paths start with '/', remove that + if dirname != '': parts = dirname.split('/') for i in range(len(parts)): partial = '/'.join(parts[:i+1]) diff --git a/src/library.js b/src/library.js index fdb5e7e6..290f71f2 100644 --- a/src/library.js +++ b/src/library.js @@ -371,8 +371,10 @@ LibraryManager.library = { if (!error.printer) error.printer = Module['print']; if (!error.buffer) error.buffer = []; - // Create the temporary folder. - FS.createFolder('/', 'tmp', true, true); + // Create the temporary folder, if not already created + try { + FS.createFolder('/', 'tmp', true, true); + } catch(e) {} // Create the I/O devices. var devFolder = FS.createFolder('/', 'dev', true, true); diff --git a/tests/runner.py b/tests/runner.py index 2dbcb760..b8cbc588 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -6923,27 +6923,36 @@ elif 'browser' in str(sys.argv): def test_preload_file(self): open(os.path.join(self.get_dir(), 'somefile.txt'), 'w').write('''load me right before running the code please''') - open(os.path.join(self.get_dir(), 'main.cpp'), 'w').write(self.with_report_result(r''' - #include <stdio.h> - #include <string.h> - #include <emscripten.h> - int main() { - FILE *f = fopen("somefile.txt", "r"); - char buf[100]; - fread(buf, 1, 20, f); - buf[20] = 0; - fclose(f); - printf("|%s|\n", buf); + def make_main(path): + print path + open(os.path.join(self.get_dir(), 'main.cpp'), 'w').write(self.with_report_result(r''' + #include <stdio.h> + #include <string.h> + #include <emscripten.h> + int main() { + FILE *f = fopen("%s", "r"); + char buf[100]; + fread(buf, 1, 20, f); + buf[20] = 0; + fclose(f); + printf("|%%s|\n", buf); - int result = !strcmp("load me right before", buf); - REPORT_RESULT(); - return 0; - } - ''')) + int result = !strcmp("load me right before", buf); + REPORT_RESULT(); + return 0; + } + ''' % path)) + make_main('somefile.txt') Popen(['python', EMCC, os.path.join(self.get_dir(), 'main.cpp'), '--preload-file', 'somefile.txt', '-o', 'page.html']).communicate() self.run_browser('page.html', 'You should see |load me right before|.', '/report_result?1') + # By absolute path + + make_main(os.path.join(self.get_dir(), 'somefile.txt')) + Popen(['python', EMCC, os.path.join(self.get_dir(), 'main.cpp'), '--preload-file', os.path.join(self.get_dir(), 'somefile.txt'), '-o', 'page.html']).communicate() + self.run_browser('page.html', 'You should see |load me right before|.', '/report_result?1') + def test_multifile(self): # a few files inside a directory self.clear() |