|
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