webruby 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
};
|