|
1 |
| -var WasmfsLibrary = { |
2 |
| - $wasmFS$JSMemoryFiles : [], |
3 |
| - $wasmFS$JSMemoryFreeList: [], |
| 1 | +var WasmFSLibrary = { |
4 | 2 | $wasmFS$preloadedFiles: [],
|
5 | 3 | $wasmFS$preloadedDirs: [],
|
6 | 4 | $FS__deps: [
|
7 | 5 | '$wasmFS$preloadedFiles',
|
8 | 6 | '$wasmFS$preloadedDirs',
|
9 |
| - '$wasmFS$JSMemoryFiles', |
10 |
| - '$wasmFS$JSMemoryFreeList', |
11 | 7 | '$asyncLoad',
|
12 | 8 | #if !MINIMAL_RUNTIME
|
13 | 9 | // TODO: when preload-plugins are not used, we do not need this.
|
@@ -145,64 +141,54 @@ var WasmfsLibrary = {
|
145 | 141 | var len = lengthBytesUTF8(s) + 1;
|
146 | 142 | stringToUTF8(s, fileNameBuffer, len);
|
147 | 143 | },
|
148 |
| - _wasmfs_write_js_file: function(index, buffer, length, offset) { |
149 |
| - try { |
150 |
| - if (!wasmFS$JSMemoryFiles[index]) { |
151 |
| - // Initialize typed array on first write operation. |
152 |
| - wasmFS$JSMemoryFiles[index] = new Uint8Array(offset + length); |
153 |
| - } |
154 |
| - |
155 |
| - if (offset + length > wasmFS$JSMemoryFiles[index].length) { |
156 |
| - // Resize the typed array if the length of the write buffer exceeds its capacity. |
157 |
| - var oldContents = wasmFS$JSMemoryFiles[index]; |
158 |
| - var newContents = new Uint8Array(offset + length); |
159 |
| - newContents.set(oldContents); |
160 |
| - wasmFS$JSMemoryFiles[index] = newContents; |
161 |
| - } |
162 |
| - |
163 |
| - wasmFS$JSMemoryFiles[index].set(HEAPU8.subarray(buffer, buffer + length), offset); |
164 |
| - return 0; |
165 |
| - } catch (err) { |
166 |
| - return {{{ cDefine('EIO') }}}; |
167 |
| - } |
| 144 | + _wasmfs_get_preloaded_file_size: function(index) { |
| 145 | + return wasmFS$preloadedFiles[index].fileData.length; |
168 | 146 | },
|
169 |
| - _wasmfs_read_js_file: function(index, buffer, length, offset) { |
170 |
| - try { |
171 |
| - HEAPU8.set(wasmFS$JSMemoryFiles[index].subarray(offset, offset + length), buffer); |
172 |
| - return 0; |
173 |
| - } catch (err) { |
174 |
| - return {{{ cDefine('EIO') }}}; |
175 |
| - } |
| 147 | + _wasmfs_copy_preloaded_file_data: function(index, buffer) { |
| 148 | + HEAPU8.set(wasmFS$preloadedFiles[index].fileData, buffer); |
176 | 149 | },
|
177 |
| - _wasmfs_get_js_file_size: function(index) { |
178 |
| - return wasmFS$JSMemoryFiles[index] ? wasmFS$JSMemoryFiles[index].length : 0; |
| 150 | + |
| 151 | + // Backend support. wasmFS$backends will contain a mapping of backend IDs to |
| 152 | + // the JS code that implements them. This is the JS side of the JSImpl class |
| 153 | + // in C++, together with the js_impl calls defined right after it. |
| 154 | + $wasmFS$backends: {}, |
| 155 | + |
| 156 | + _wasmfs_jsimpl_alloc_file: function(backend, file) { |
| 157 | +#if ASSERTIONS |
| 158 | + assert(wasmFS$backends[backend]); |
| 159 | +#endif |
| 160 | + return wasmFS$backends[backend].alloc_file(file); |
179 | 161 | },
|
180 |
| - _wasmfs_create_js_file: function() { |
181 |
| - // Find a free entry in the $wasmFS$JSMemoryFreeList or append a new entry to |
182 |
| - // wasmFS$JSMemoryFiles. |
183 |
| - if (wasmFS$JSMemoryFreeList.length) { |
184 |
| - // Pop off the top of the free list. |
185 |
| - var index = wasmFS$JSMemoryFreeList.pop(); |
186 |
| - return index; |
187 |
| - } |
188 |
| - wasmFS$JSMemoryFiles.push(null); |
189 |
| - return wasmFS$JSMemoryFiles.length - 1; |
| 162 | + |
| 163 | + _wasmfs_jsimpl_free_file: function(backend, file) { |
| 164 | +#if ASSERTIONS |
| 165 | + assert(wasmFS$backends[backend]); |
| 166 | +#endif |
| 167 | + return wasmFS$backends[backend].free_file(file); |
190 | 168 | },
|
191 |
| - _wasmfs_remove_js_file: function(index) { |
192 |
| - wasmFS$JSMemoryFiles[index] = null; |
193 |
| - // Add the index to the free list. |
194 |
| - wasmFS$JSMemoryFreeList.push(index); |
| 169 | + |
| 170 | + _wasmfs_jsimpl_write: function(backend, file, buffer, length, offset) { |
| 171 | +#if ASSERTIONS |
| 172 | + assert(wasmFS$backends[backend]); |
| 173 | +#endif |
| 174 | + return wasmFS$backends[backend].write(file, buffer, length, offset); |
195 | 175 | },
|
196 |
| - _wasmfs_get_preloaded_file_size: function(index) { |
197 |
| - return wasmFS$preloadedFiles[index].fileData.length; |
| 176 | + |
| 177 | + _wasmfs_jsimpl_read: function(backend, file, buffer, length, offset) { |
| 178 | +#if ASSERTIONS |
| 179 | + assert(wasmFS$backends[backend]); |
| 180 | +#endif |
| 181 | + return wasmFS$backends[backend].read(file, buffer, length, offset); |
198 | 182 | },
|
199 |
| - _wasmfs_copy_preloaded_file_data: function(index, buffer) { |
200 |
| - HEAPU8.set(wasmFS$preloadedFiles[index].fileData, buffer); |
| 183 | + |
| 184 | + _wasmfs_jsimpl_get_size: function(backend, file) { |
| 185 | +#if ASSERTIONS |
| 186 | + assert(wasmFS$backends[backend]); |
| 187 | +#endif |
| 188 | + return wasmFS$backends[backend].getSize(file); |
201 | 189 | },
|
202 | 190 | }
|
203 | 191 |
|
204 |
| -mergeInto(LibraryManager.library, WasmfsLibrary); |
| 192 | +mergeInto(LibraryManager.library, WasmFSLibrary); |
205 | 193 |
|
206 |
| -if (WASMFS) { |
207 |
| - DEFAULT_LIBRARY_FUNCS_TO_INCLUDE.push('$FS'); |
208 |
| -} |
| 194 | +DEFAULT_LIBRARY_FUNCS_TO_INCLUDE.push('$FS'); |
0 commit comments