webruby 0.2.2 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/webruby/config.rb +4 -9
- data/lib/webruby/rake/files.rake +2 -2
- data/modules/emscripten/AUTHORS +9 -1
- data/modules/emscripten/CONTRIBUTING.markdown +5 -0
- data/modules/emscripten/ChangeLog +435 -0
- data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
- data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
- data/modules/emscripten/em++ +0 -2
- data/modules/emscripten/emcc +92 -32
- data/modules/emscripten/emlink.py +16 -13
- data/modules/emscripten/emmake +1 -1
- data/modules/emscripten/emrun +918 -0
- data/modules/emscripten/emrun.bat +2 -0
- data/modules/emscripten/emscripten.py +545 -20
- data/modules/emscripten/src/analyzer.js +6 -1
- data/modules/emscripten/src/compiler.js +25 -16
- data/modules/emscripten/src/emrun_postjs.js +20 -0
- data/modules/emscripten/{tests → src}/hello_world.js +0 -0
- data/modules/emscripten/src/intertyper.js +45 -16
- data/modules/emscripten/src/jsifier.js +78 -48
- data/modules/emscripten/src/library.js +381 -96
- data/modules/emscripten/src/library_browser.js +50 -53
- data/modules/emscripten/src/library_egl.js +66 -24
- data/modules/emscripten/src/library_fs.js +122 -90
- data/modules/emscripten/src/library_gl.js +739 -353
- data/modules/emscripten/src/library_glfw.js +9 -3
- data/modules/emscripten/src/library_glut.js +10 -5
- data/modules/emscripten/src/library_idbfs.js +14 -14
- data/modules/emscripten/src/library_memfs.js +65 -41
- data/modules/emscripten/src/library_nodefs.js +61 -9
- data/modules/emscripten/src/library_openal.js +4 -4
- data/modules/emscripten/src/library_path.js +9 -13
- data/modules/emscripten/src/library_sdl.js +301 -64
- data/modules/emscripten/src/library_sockfs.js +7 -5
- data/modules/emscripten/src/modules.js +62 -22
- data/modules/emscripten/src/parseTools.js +135 -102
- data/modules/emscripten/src/postamble.js +3 -4
- data/modules/emscripten/src/preamble.js +49 -29
- data/modules/emscripten/src/proxyClient.js +1 -1
- data/modules/emscripten/src/proxyWorker.js +10 -10
- data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
- data/modules/emscripten/src/runtime.js +32 -8
- data/modules/emscripten/src/settings.js +25 -8
- data/modules/emscripten/src/shell.html +6 -3
- data/modules/emscripten/src/shell.js +13 -11
- data/modules/emscripten/src/simd.js +602 -432
- data/modules/emscripten/src/struct_info.json +22 -2
- data/modules/emscripten/src/utility.js +32 -17
- data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
- data/modules/emscripten/system/include/compat/ctype.h +17 -0
- data/modules/emscripten/system/include/compat/wchar.h +23 -0
- data/modules/emscripten/system/include/compat/wctype.h +23 -0
- data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
- data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
- data/modules/emscripten/system/include/emscripten/vector.h +29 -1
- data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
- data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
- data/modules/emscripten/system/include/libcxx/__config +95 -17
- data/modules/emscripten/system/include/libcxx/__debug +25 -4
- data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
- data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
- data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
- data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
- data/modules/emscripten/system/include/libcxx/__locale +21 -19
- data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
- data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
- data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
- data/modules/emscripten/system/include/libcxx/__tree +35 -26
- data/modules/emscripten/system/include/libcxx/__tuple +15 -15
- data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
- data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
- data/modules/emscripten/system/include/libcxx/algorithm +121 -110
- data/modules/emscripten/system/include/libcxx/array +15 -15
- data/modules/emscripten/system/include/libcxx/bitset +4 -4
- data/modules/emscripten/system/include/libcxx/chrono +51 -17
- data/modules/emscripten/system/include/libcxx/cmath +25 -23
- data/modules/emscripten/system/include/libcxx/codecvt +21 -18
- data/modules/emscripten/system/include/libcxx/complex +48 -7
- data/modules/emscripten/system/include/libcxx/cstddef +1 -1
- data/modules/emscripten/system/include/libcxx/cstdio +8 -1
- data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
- data/modules/emscripten/system/include/libcxx/cwchar +1 -1
- data/modules/emscripten/system/include/libcxx/deque +26 -12
- data/modules/emscripten/system/include/libcxx/dynarray +311 -0
- data/modules/emscripten/system/include/libcxx/exception +4 -4
- data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
- data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
- data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
- data/modules/emscripten/system/include/libcxx/forward_list +33 -7
- data/modules/emscripten/system/include/libcxx/fstream +4 -4
- data/modules/emscripten/system/include/libcxx/functional +200 -170
- data/modules/emscripten/system/include/libcxx/future +83 -39
- data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
- data/modules/emscripten/system/include/libcxx/iomanip +147 -0
- data/modules/emscripten/system/include/libcxx/ios +24 -16
- data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
- data/modules/emscripten/system/include/libcxx/istream +13 -8
- data/modules/emscripten/system/include/libcxx/iterator +108 -417
- data/modules/emscripten/system/include/libcxx/limits +8 -4
- data/modules/emscripten/system/include/libcxx/list +28 -8
- data/modules/emscripten/system/include/libcxx/locale +153 -390
- data/modules/emscripten/system/include/libcxx/map +280 -100
- data/modules/emscripten/system/include/libcxx/memory +49 -97
- data/modules/emscripten/system/include/libcxx/mutex +2 -2
- data/modules/emscripten/system/include/libcxx/new +43 -14
- data/modules/emscripten/system/include/libcxx/numeric +2 -2
- data/modules/emscripten/system/include/libcxx/optional +697 -0
- data/modules/emscripten/system/include/libcxx/ostream +17 -8
- data/modules/emscripten/system/include/libcxx/queue +5 -5
- data/modules/emscripten/system/include/libcxx/random +53 -51
- data/modules/emscripten/system/include/libcxx/ratio +11 -11
- data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/include/libcxx/regex +23 -20
- data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
- data/modules/emscripten/system/include/libcxx/set +166 -2
- data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
- data/modules/emscripten/system/include/libcxx/sstream +4 -4
- data/modules/emscripten/system/include/libcxx/stack +3 -3
- data/modules/emscripten/system/include/libcxx/streambuf +5 -5
- data/modules/emscripten/system/include/libcxx/string +372 -324
- data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
- data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
- data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
- data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
- data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
- data/modules/emscripten/system/include/libcxx/system_error +14 -8
- data/modules/emscripten/system/include/libcxx/thread +7 -8
- data/modules/emscripten/system/include/libcxx/tuple +29 -88
- data/modules/emscripten/system/include/libcxx/type_traits +253 -209
- data/modules/emscripten/system/include/libcxx/typeindex +3 -3
- data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
- data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
- data/modules/emscripten/system/include/libcxx/utility +20 -20
- data/modules/emscripten/system/include/libcxx/valarray +23 -23
- data/modules/emscripten/system/include/libcxx/vector +114 -91
- data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
- data/modules/emscripten/system/lib/libcextra.symbols +7 -0
- data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
- data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
- data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
- data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
- data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
- data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
- data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
- data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
- data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
- data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
- data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
- data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
- data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
- data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
- data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
- data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
- data/modules/emscripten/system/lib/libcxx/symbols +187 -168
- data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
- data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
- data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
- data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
- data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
- data/modules/emscripten/tools/cache.py +5 -7
- data/modules/emscripten/tools/cache.pyc +0 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
- data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
- data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
- data/modules/emscripten/tools/file_packager.py +93 -50
- data/modules/emscripten/tools/js-optimizer.js +98 -48
- data/modules/emscripten/tools/js_optimizer.py +4 -4
- data/modules/emscripten/tools/js_optimizer.pyc +0 -0
- data/modules/emscripten/tools/jsrun.py +1 -1
- data/modules/emscripten/tools/jsrun.pyc +0 -0
- data/modules/emscripten/tools/response_file.py +6 -0
- data/modules/emscripten/tools/response_file.pyc +0 -0
- data/modules/emscripten/tools/settings_template_readonly.py +2 -0
- data/modules/emscripten/tools/shared.py +88 -34
- data/modules/emscripten/tools/shared.pyc +0 -0
- data/modules/emscripten/tools/split.py +21 -13
- data/modules/mruby/build_config.rb +7 -1
- data/modules/mruby/doc/compile/README.md +5 -9
- data/modules/mruby/include/mrbconf.h +5 -2
- data/modules/mruby/include/mruby/array.h +1 -0
- data/modules/mruby/include/mruby/compile.h +2 -4
- data/modules/mruby/include/mruby/dump.h +7 -16
- data/modules/mruby/include/mruby/hash.h +1 -1
- data/modules/mruby/include/mruby/irep.h +14 -2
- data/modules/mruby/include/mruby/khash.h +8 -7
- data/modules/mruby/include/mruby/string.h +1 -0
- data/modules/mruby/include/mruby/value.h +5 -2
- data/modules/mruby/include/mruby.h +12 -13
- data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
- data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
- data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
- data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
- data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
- data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
- data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
- data/modules/mruby/mrblib/numeric.rb +99 -33
- data/modules/mruby/src/array.c +11 -4
- data/modules/mruby/src/backtrace.c +2 -2
- data/modules/mruby/src/class.c +49 -30
- data/modules/mruby/src/codegen.c +131 -79
- data/modules/mruby/src/debug.c +1 -1
- data/modules/mruby/src/dump.c +213 -163
- data/modules/mruby/src/error.c +17 -17
- data/modules/mruby/src/error.h +1 -1
- data/modules/mruby/src/etc.c +10 -0
- data/modules/mruby/src/gc.c +35 -17
- data/modules/mruby/src/hash.c +5 -5
- data/modules/mruby/src/kernel.c +36 -14
- data/modules/mruby/src/load.c +238 -296
- data/modules/mruby/src/numeric.c +18 -98
- data/modules/mruby/src/object.c +3 -5
- data/modules/mruby/src/parse.y +63 -56
- data/modules/mruby/src/proc.c +8 -5
- data/modules/mruby/src/re.h +0 -1
- data/modules/mruby/src/state.c +65 -27
- data/modules/mruby/src/string.c +3 -31
- data/modules/mruby/src/symbol.c +3 -3
- data/modules/mruby/src/variable.c +12 -5
- data/modules/mruby/src/vm.c +90 -72
- data/modules/mruby/tasks/mruby_build.rake +10 -1
- data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
- data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
- data/modules/mruby/test/driver.c +3 -3
- data/modules/mruby/test/t/array.rb +5 -5
- data/modules/mruby/test/t/class.rb +14 -1
- data/modules/mruby/test/t/kernel.rb +4 -0
- data/modules/mruby/test/t/module.rb +4 -4
- data/modules/mruby/test/t/nameerror.rb +1 -1
- data/modules/mruby/tools/mrbc/mrbc.c +23 -17
- data/modules/mruby/travis_config.rb +10 -1
- metadata +28 -5
- data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -28,6 +28,7 @@ mergeInto(LibraryManager.library, {
|
|
28
28
|
ignorePermissions: true,
|
29
29
|
|
30
30
|
ErrnoError: null, // set during init
|
31
|
+
genericErrors: {},
|
31
32
|
|
32
33
|
handleFSError: function(e) {
|
33
34
|
if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
|
@@ -62,7 +63,7 @@ mergeInto(LibraryManager.library, {
|
|
62
63
|
}
|
63
64
|
|
64
65
|
current = FS.lookupNode(current, parts[i]);
|
65
|
-
current_path = PATH.
|
66
|
+
current_path = PATH.join2(current_path, parts[i]);
|
66
67
|
|
67
68
|
// jump to the mount's root node if this is a mountpoint
|
68
69
|
if (FS.isMountpoint(current)) {
|
@@ -94,9 +95,11 @@ mergeInto(LibraryManager.library, {
|
|
94
95
|
var path;
|
95
96
|
while (true) {
|
96
97
|
if (FS.isRoot(node)) {
|
97
|
-
|
98
|
+
var mount = node.mount.mountpoint;
|
99
|
+
if (!path) return mount;
|
100
|
+
return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
|
98
101
|
}
|
99
|
-
path = path ?
|
102
|
+
path = path ? node.name + '/' + path : node.name;
|
100
103
|
node = node.parent;
|
101
104
|
}
|
102
105
|
},
|
@@ -158,44 +161,50 @@ mergeInto(LibraryManager.library, {
|
|
158
161
|
return FS.lookup(parent, name);
|
159
162
|
},
|
160
163
|
createNode: function(parent, name, mode, rdev) {
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
164
|
+
if (!FS.FSNode) {
|
165
|
+
FS.FSNode = function(parent, name, mode, rdev) {
|
166
|
+
this.id = FS.nextInode++;
|
167
|
+
this.name = name;
|
168
|
+
this.mode = mode;
|
169
|
+
this.node_ops = {};
|
170
|
+
this.stream_ops = {};
|
171
|
+
this.rdev = rdev;
|
172
|
+
this.parent = null;
|
173
|
+
this.mount = null;
|
174
|
+
if (!parent) {
|
175
|
+
parent = this; // root node sets parent to itself
|
176
|
+
}
|
177
|
+
this.parent = parent;
|
178
|
+
this.mount = parent.mount;
|
179
|
+
FS.hashAddNode(this);
|
180
|
+
};
|
181
|
+
|
182
|
+
// compatibility
|
183
|
+
var readMode = {{{ cDefine('S_IRUGO') }}} | {{{ cDefine('S_IXUGO') }}};
|
184
|
+
var writeMode = {{{ cDefine('S_IWUGO') }}};
|
185
|
+
|
186
|
+
FS.FSNode.prototype = {};
|
187
|
+
|
188
|
+
// NOTE we must use Object.defineProperties instead of individual calls to
|
189
|
+
// Object.defineProperty in order to make closure compiler happy
|
190
|
+
Object.defineProperties(FS.FSNode.prototype, {
|
191
|
+
read: {
|
192
|
+
get: function() { return (this.mode & readMode) === readMode; },
|
193
|
+
set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
|
194
|
+
},
|
195
|
+
write: {
|
196
|
+
get: function() { return (this.mode & writeMode) === writeMode; },
|
197
|
+
set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
|
198
|
+
},
|
199
|
+
isFolder: {
|
200
|
+
get: function() { return FS.isDir(this.mode); },
|
201
|
+
},
|
202
|
+
isDevice: {
|
203
|
+
get: function() { return FS.isChrdev(this.mode); },
|
204
|
+
},
|
205
|
+
});
|
206
|
+
}
|
207
|
+
return new FS.FSNode(parent, name, mode, rdev);
|
199
208
|
},
|
200
209
|
destroyNode: function(node) {
|
201
210
|
FS.hashRemoveNode(node);
|
@@ -351,24 +360,38 @@ mergeInto(LibraryManager.library, {
|
|
351
360
|
// object isn't directly passed in. not possible until
|
352
361
|
// SOCKFS is completed.
|
353
362
|
createStream: function(stream, fd_start, fd_end) {
|
363
|
+
if (!FS.FSStream) {
|
364
|
+
FS.FSStream = function(){};
|
365
|
+
FS.FSStream.prototype = {};
|
366
|
+
// compatibility
|
367
|
+
Object.defineProperties(FS.FSStream.prototype, {
|
368
|
+
object: {
|
369
|
+
get: function() { return this.node; },
|
370
|
+
set: function(val) { this.node = val; }
|
371
|
+
},
|
372
|
+
isRead: {
|
373
|
+
get: function() { return (this.flags & {{{ cDefine('O_ACCMODE') }}}) !== {{{ cDefine('O_WRONLY') }}}; }
|
374
|
+
},
|
375
|
+
isWrite: {
|
376
|
+
get: function() { return (this.flags & {{{ cDefine('O_ACCMODE') }}}) !== {{{ cDefine('O_RDONLY') }}}; }
|
377
|
+
},
|
378
|
+
isAppend: {
|
379
|
+
get: function() { return (this.flags & {{{ cDefine('O_APPEND') }}}); }
|
380
|
+
}
|
381
|
+
});
|
382
|
+
}
|
383
|
+
if (stream.__proto__) {
|
384
|
+
// reuse the object
|
385
|
+
stream.__proto__ = FS.FSStream.prototype;
|
386
|
+
} else {
|
387
|
+
var newStream = new FS.FSStream();
|
388
|
+
for (var p in stream) {
|
389
|
+
newStream[p] = stream[p];
|
390
|
+
}
|
391
|
+
stream = newStream;
|
392
|
+
}
|
354
393
|
var fd = FS.nextfd(fd_start, fd_end);
|
355
394
|
stream.fd = fd;
|
356
|
-
// compatibility
|
357
|
-
Object.defineProperties(stream, {
|
358
|
-
object: {
|
359
|
-
get: function() { return stream.node; },
|
360
|
-
set: function(val) { stream.node = val; }
|
361
|
-
},
|
362
|
-
isRead: {
|
363
|
-
get: function() { return (stream.flags & {{{ cDefine('O_ACCMODE') }}}) !== {{{ cDefine('O_WRONLY') }}}; }
|
364
|
-
},
|
365
|
-
isWrite: {
|
366
|
-
get: function() { return (stream.flags & {{{ cDefine('O_ACCMODE') }}}) !== {{{ cDefine('O_RDONLY') }}}; }
|
367
|
-
},
|
368
|
-
isAppend: {
|
369
|
-
get: function() { return (stream.flags & {{{ cDefine('O_APPEND') }}}); }
|
370
|
-
}
|
371
|
-
});
|
372
395
|
FS.streams[fd] = stream;
|
373
396
|
return stream;
|
374
397
|
},
|
@@ -426,7 +449,7 @@ mergeInto(LibraryManager.library, {
|
|
426
449
|
|
427
450
|
var completed = 0;
|
428
451
|
var total = FS.mounts.length;
|
429
|
-
|
452
|
+
function done(err) {
|
430
453
|
if (err) {
|
431
454
|
return callback(err);
|
432
455
|
}
|
@@ -771,7 +794,6 @@ mergeInto(LibraryManager.library, {
|
|
771
794
|
});
|
772
795
|
},
|
773
796
|
open: function(path, flags, mode, fd_start, fd_end) {
|
774
|
-
path = PATH.normalize(path);
|
775
797
|
flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
|
776
798
|
mode = typeof mode === 'undefined' ? 0666 : mode;
|
777
799
|
if ((flags & {{{ cDefine('O_CREAT') }}})) {
|
@@ -780,13 +802,18 @@ mergeInto(LibraryManager.library, {
|
|
780
802
|
mode = 0;
|
781
803
|
}
|
782
804
|
var node;
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
805
|
+
if (typeof path === 'object') {
|
806
|
+
node = path;
|
807
|
+
} else {
|
808
|
+
path = PATH.normalize(path);
|
809
|
+
try {
|
810
|
+
var lookup = FS.lookupPath(path, {
|
811
|
+
follow: !(flags & {{{ cDefine('O_NOFOLLOW') }}})
|
812
|
+
});
|
813
|
+
node = lookup.node;
|
814
|
+
} catch (e) {
|
815
|
+
// ignore
|
816
|
+
}
|
790
817
|
}
|
791
818
|
// perhaps we need to create the node
|
792
819
|
if ((flags & {{{ cDefine('O_CREAT') }}})) {
|
@@ -934,7 +961,7 @@ mergeInto(LibraryManager.library, {
|
|
934
961
|
throw new FS.ErrnoError(ERRNO_CODES.EACCES);
|
935
962
|
}
|
936
963
|
if (!stream.stream_ops.mmap) {
|
937
|
-
throw new FS.
|
964
|
+
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
|
938
965
|
}
|
939
966
|
return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
|
940
967
|
},
|
@@ -1079,6 +1106,11 @@ mergeInto(LibraryManager.library, {
|
|
1079
1106
|
};
|
1080
1107
|
FS.ErrnoError.prototype = new Error();
|
1081
1108
|
FS.ErrnoError.prototype.constructor = FS.ErrnoError;
|
1109
|
+
// Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
|
1110
|
+
[ERRNO_CODES.ENOENT].forEach(function(code) {
|
1111
|
+
FS.genericErrors[code] = new FS.ErrnoError(code);
|
1112
|
+
FS.genericErrors[code].stack = '<generic error, no stack>';
|
1113
|
+
});
|
1082
1114
|
},
|
1083
1115
|
staticInit: function() {
|
1084
1116
|
FS.ensureErrnoError();
|
@@ -1173,7 +1205,7 @@ mergeInto(LibraryManager.library, {
|
|
1173
1205
|
return ret;
|
1174
1206
|
},
|
1175
1207
|
createFolder: function(parent, name, canRead, canWrite) {
|
1176
|
-
var path = PATH.
|
1208
|
+
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
1177
1209
|
var mode = FS.getMode(canRead, canWrite);
|
1178
1210
|
return FS.mkdir(path, mode);
|
1179
1211
|
},
|
@@ -1183,7 +1215,7 @@ mergeInto(LibraryManager.library, {
|
|
1183
1215
|
while (parts.length) {
|
1184
1216
|
var part = parts.pop();
|
1185
1217
|
if (!part) continue;
|
1186
|
-
var current = PATH.
|
1218
|
+
var current = PATH.join2(parent, part);
|
1187
1219
|
try {
|
1188
1220
|
FS.mkdir(current);
|
1189
1221
|
} catch (e) {
|
@@ -1194,12 +1226,12 @@ mergeInto(LibraryManager.library, {
|
|
1194
1226
|
return current;
|
1195
1227
|
},
|
1196
1228
|
createFile: function(parent, name, properties, canRead, canWrite) {
|
1197
|
-
var path = PATH.
|
1229
|
+
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
1198
1230
|
var mode = FS.getMode(canRead, canWrite);
|
1199
1231
|
return FS.create(path, mode);
|
1200
1232
|
},
|
1201
1233
|
createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
|
1202
|
-
var path = name ? PATH.
|
1234
|
+
var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
|
1203
1235
|
var mode = FS.getMode(canRead, canWrite);
|
1204
1236
|
var node = FS.create(path, mode);
|
1205
1237
|
if (data) {
|
@@ -1209,16 +1241,16 @@ mergeInto(LibraryManager.library, {
|
|
1209
1241
|
data = arr;
|
1210
1242
|
}
|
1211
1243
|
// make sure we can write to the file
|
1212
|
-
FS.chmod(
|
1213
|
-
var stream = FS.open(
|
1244
|
+
FS.chmod(node, mode | {{{ cDefine('S_IWUGO') }}});
|
1245
|
+
var stream = FS.open(node, 'w');
|
1214
1246
|
FS.write(stream, data, 0, data.length, 0, canOwn);
|
1215
1247
|
FS.close(stream);
|
1216
|
-
FS.chmod(
|
1248
|
+
FS.chmod(node, mode);
|
1217
1249
|
}
|
1218
1250
|
return node;
|
1219
1251
|
},
|
1220
1252
|
createDevice: function(parent, name, input, output) {
|
1221
|
-
var path = PATH.
|
1253
|
+
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
1222
1254
|
var mode = FS.getMode(!!input, !!output);
|
1223
1255
|
if (!FS.createDevice.major) FS.createDevice.major = 64;
|
1224
1256
|
var dev = FS.makedev(FS.createDevice.major++, 0);
|
@@ -1272,7 +1304,7 @@ mergeInto(LibraryManager.library, {
|
|
1272
1304
|
return FS.mkdev(path, mode, dev);
|
1273
1305
|
},
|
1274
1306
|
createLink: function(parent, name, target, canRead, canWrite) {
|
1275
|
-
var path = PATH.
|
1307
|
+
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
1276
1308
|
return FS.symlink(target, path);
|
1277
1309
|
},
|
1278
1310
|
// Makes sure a file's contents are loaded. Returns whether the file has
|
@@ -1304,11 +1336,11 @@ mergeInto(LibraryManager.library, {
|
|
1304
1336
|
if (typeof XMLHttpRequest !== 'undefined') {
|
1305
1337
|
if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
|
1306
1338
|
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
|
1307
|
-
|
1339
|
+
function LazyUint8Array() {
|
1308
1340
|
this.lengthKnown = false;
|
1309
1341
|
this.chunks = []; // Loaded chunks. Index is the chunk number
|
1310
1342
|
}
|
1311
|
-
LazyUint8Array.prototype.get = function(idx) {
|
1343
|
+
LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
|
1312
1344
|
if (idx > this.length-1 || idx < 0) {
|
1313
1345
|
return undefined;
|
1314
1346
|
}
|
@@ -1316,10 +1348,10 @@ mergeInto(LibraryManager.library, {
|
|
1316
1348
|
var chunkNum = Math.floor(idx / this.chunkSize);
|
1317
1349
|
return this.getter(chunkNum)[chunkOffset];
|
1318
1350
|
}
|
1319
|
-
LazyUint8Array.prototype.setDataGetter = function(getter) {
|
1351
|
+
LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
|
1320
1352
|
this.getter = getter;
|
1321
1353
|
}
|
1322
|
-
LazyUint8Array.prototype.cacheLength = function() {
|
1354
|
+
LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
|
1323
1355
|
// Find length
|
1324
1356
|
var xhr = new XMLHttpRequest();
|
1325
1357
|
xhr.open('HEAD', url, false);
|
@@ -1415,7 +1447,7 @@ mergeInto(LibraryManager.library, {
|
|
1415
1447
|
var keys = Object.keys(node.stream_ops);
|
1416
1448
|
keys.forEach(function(key) {
|
1417
1449
|
var fn = node.stream_ops[key];
|
1418
|
-
stream_ops[key] = function() {
|
1450
|
+
stream_ops[key] = function forceLoadLazyFile() {
|
1419
1451
|
if (!FS.forceLoadFile(node)) {
|
1420
1452
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
1421
1453
|
}
|
@@ -1423,7 +1455,7 @@ mergeInto(LibraryManager.library, {
|
|
1423
1455
|
};
|
1424
1456
|
});
|
1425
1457
|
// use a custom read function
|
1426
|
-
stream_ops.read = function(stream, buffer, offset, length, position) {
|
1458
|
+
stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
|
1427
1459
|
if (!FS.forceLoadFile(node)) {
|
1428
1460
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
1429
1461
|
}
|
@@ -1462,7 +1494,7 @@ mergeInto(LibraryManager.library, {
|
|
1462
1494
|
Browser.init();
|
1463
1495
|
// TODO we should allow people to just pass in a complete filename instead
|
1464
1496
|
// of parent and name being that we just join them anyways
|
1465
|
-
var fullname = name ? PATH.resolve(PATH.
|
1497
|
+
var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
|
1466
1498
|
function processData(byteArray) {
|
1467
1499
|
function finish(byteArray) {
|
1468
1500
|
if (!dontCreateFile) {
|
@@ -1517,12 +1549,12 @@ mergeInto(LibraryManager.library, {
|
|
1517
1549
|
} catch (e) {
|
1518
1550
|
return onerror(e);
|
1519
1551
|
}
|
1520
|
-
openRequest.onupgradeneeded = function() {
|
1552
|
+
openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
|
1521
1553
|
console.log('creating db');
|
1522
1554
|
var db = openRequest.result;
|
1523
1555
|
db.createObjectStore(FS.DB_STORE_NAME);
|
1524
1556
|
};
|
1525
|
-
openRequest.onsuccess = function() {
|
1557
|
+
openRequest.onsuccess = function openRequest_onsuccess() {
|
1526
1558
|
var db = openRequest.result;
|
1527
1559
|
var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
|
1528
1560
|
var files = transaction.objectStore(FS.DB_STORE_NAME);
|
@@ -1532,8 +1564,8 @@ mergeInto(LibraryManager.library, {
|
|
1532
1564
|
}
|
1533
1565
|
paths.forEach(function(path) {
|
1534
1566
|
var putRequest = files.put(FS.analyzePath(path).object.contents, path);
|
1535
|
-
putRequest.onsuccess = function() { ok++; if (ok + fail == total) finish() };
|
1536
|
-
putRequest.onerror = function() { fail++; if (ok + fail == total) finish() };
|
1567
|
+
putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
|
1568
|
+
putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
|
1537
1569
|
});
|
1538
1570
|
transaction.onerror = onerror;
|
1539
1571
|
};
|
@@ -1551,7 +1583,7 @@ mergeInto(LibraryManager.library, {
|
|
1551
1583
|
return onerror(e);
|
1552
1584
|
}
|
1553
1585
|
openRequest.onupgradeneeded = onerror; // no database to load from
|
1554
|
-
openRequest.onsuccess = function() {
|
1586
|
+
openRequest.onsuccess = function openRequest_onsuccess() {
|
1555
1587
|
var db = openRequest.result;
|
1556
1588
|
try {
|
1557
1589
|
var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
|
@@ -1566,7 +1598,7 @@ mergeInto(LibraryManager.library, {
|
|
1566
1598
|
}
|
1567
1599
|
paths.forEach(function(path) {
|
1568
1600
|
var getRequest = files.get(path);
|
1569
|
-
getRequest.onsuccess = function() {
|
1601
|
+
getRequest.onsuccess = function getRequest_onsuccess() {
|
1570
1602
|
if (FS.analyzePath(path).exists) {
|
1571
1603
|
FS.unlink(path);
|
1572
1604
|
}
|
@@ -1574,7 +1606,7 @@ mergeInto(LibraryManager.library, {
|
|
1574
1606
|
ok++;
|
1575
1607
|
if (ok + fail == total) finish();
|
1576
1608
|
};
|
1577
|
-
getRequest.onerror = function() { fail++; if (ok + fail == total) finish() };
|
1609
|
+
getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
|
1578
1610
|
});
|
1579
1611
|
transaction.onerror = onerror;
|
1580
1612
|
};
|