aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-05-08 20:35:37 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-05-08 20:35:37 -0700
commita7590b8609cc0597305171ff2489eda8c893ffbd (patch)
tree3455aa6f990c8ce0fb6099b0e267401c26cb6803
parentfe319edc466181f6c954360178dba280591e0c2f (diff)
handle absolute paths in file preloading
-rwxr-xr-xemcc3
-rw-r--r--src/library.js6
-rwxr-xr-xtests/runner.py41
3 files changed, 31 insertions, 19 deletions
diff --git a/emcc b/emcc
index eeb8fd7b..39918e22 100755
--- a/emcc
+++ b/emcc
@@ -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()