Commit 7f578a81 authored by Michael Droettboom's avatar Michael Droettboom

Fix library_lz4.js

parent 0d4b22ba
...@@ -4,6 +4,7 @@ all: emsdk/.complete ...@@ -4,6 +4,7 @@ all: emsdk/.complete
# run out of memory # run out of memory
emsdk/.complete: emsdk/.complete:
if [ -d emsdk ]; then rm -rf emsdk; fi if [ -d emsdk ]; then rm -rf emsdk; fi
git clone https://github.com/juj/emsdk.git git clone https://github.com/juj/emsdk.git
......
diff --git a/src/library_lz4.js b/src/library_lz4.js diff --git a/src/library_lz4.js b/src/library_lz4.js
index 4c3f583b7..bca230feb 100644 index 4c3f583b7..9540a64fb 100644
--- a/emsdk/emscripten/tag-1.38.10/src/library_lz4.js --- a/src/library_lz4.js
+++ b/emsdk/emscripten/tag-1.38.10/src/library_lz4.js +++ b/src/library_lz4.js
@@ -5,26 +5,15 @@ mergeInto(LibraryManager.library, { @@ -5,26 +5,15 @@ mergeInto(LibraryManager.library, {
DIR_MODE: {{{ cDefine('S_IFDIR') }}} | 511 /* 0777 */, DIR_MODE: {{{ cDefine('S_IFDIR') }}} | 511 /* 0777 */,
FILE_MODE: {{{ cDefine('S_IFREG') }}} | 511 /* 0777 */, FILE_MODE: {{{ cDefine('S_IFREG') }}} | 511 /* 0777 */,
CHUNK_SIZE: -1, CHUNK_SIZE: -1,
- codec: null, - codec: null,
+ buf: null,
init: function() { init: function() {
- if (LZ4.codec) return; - if (LZ4.codec) return;
- LZ4.codec = (function() { - LZ4.codec = (function() {
...@@ -29,27 +28,29 @@ index 4c3f583b7..bca230feb 100644 ...@@ -29,27 +28,29 @@ index 4c3f583b7..bca230feb 100644
- compressedData.cachedOffset + (i+1)*LZ4.CHUNK_SIZE); - compressedData.cachedOffset + (i+1)*LZ4.CHUNK_SIZE);
- assert(compressedData.cachedChunks[i].length === LZ4.CHUNK_SIZE); - assert(compressedData.cachedChunks[i].length === LZ4.CHUNK_SIZE);
- } - }
+ compressedData.buf = null;
pack['metadata'].files.forEach(function(file) { pack['metadata'].files.forEach(function(file) {
var dir = PATH.dirname(file.filename); var dir = PATH.dirname(file.filename);
var name = PATH.basename(file.filename); var name = PATH.basename(file.filename);
@@ -112,8 +101,16 @@ mergeInto(LibraryManager.library, { @@ -112,8 +101,17 @@ mergeInto(LibraryManager.library, {
//console.log('LZ4 read ' + [offset, length, position]); //console.log('LZ4 read ' + [offset, length, position]);
length = Math.min(length, stream.node.size - position); length = Math.min(length, stream.node.size - position);
if (length <= 0) return 0; if (length <= 0) return 0;
+ +
var contents = stream.node.contents; var contents = stream.node.contents;
var compressedData = contents.compressedData; var compressedData = contents.compressedData;
+ if (LZ4.buf === null) { + if (compressedData.buf === null) {
+ LZ4.buf = Module['_malloc'](LZ4.CHUNK_SIZE); + compressedData.buf = Module['_malloc'](LZ4.CHUNK_SIZE * 2);
+ for (var i = 0; i < compressedData.cachedIndexes.length; i++) { + for (var i = 0; i < compressedData.cachedIndexes.length; i++) {
+ compressedData.cachedIndexes[i] = -1; + compressedData.cachedIndexes[i] = -1;
+ compressedData.cachedChunks[i] = Module['_malloc'](LZ4.CHUNK_SIZE); + compressedData.cachedChunks[i] = Module['_malloc'](LZ4.CHUNK_SIZE * 2);
+ assert(compressedData.cachedChunks[i] !== null)
+ } + }
+ } + }
var written = 0; var written = 0;
while (written < length) { while (written < length) {
var start = contents.start + position + written; // start index in uncompressed data var start = contents.start + position + written; // start index in uncompressed data
@@ -138,18 +135,24 @@ mergeInto(LibraryManager.library, { @@ -138,18 +136,23 @@ mergeInto(LibraryManager.library, {
Module['decompressedChunks'] = (Module['decompressedChunks'] || 0) + 1; Module['decompressedChunks'] = (Module['decompressedChunks'] || 0) + 1;
} }
var compressed = compressedData.data.subarray(compressedStart, compressedStart + compressedSize); var compressed = compressedData.data.subarray(compressedStart, compressedStart + compressedSize);
...@@ -58,8 +59,8 @@ index 4c3f583b7..bca230feb 100644 ...@@ -58,8 +59,8 @@ index 4c3f583b7..bca230feb 100644
- //console.log('decompress time: ' + (Date.now() - t)); - //console.log('decompress time: ' + (Date.now() - t));
+ // var t = Date.now(); + // var t = Date.now();
+ // var originalSize = LZ4.codec.uncompress(compressed, currChunk); + // var originalSize = LZ4.codec.uncompress(compressed, currChunk);
+ Module.HEAPU8.set(compressed, LZ4.buf); + Module.HEAPU8.set(compressed, compressedData.buf);
+ var originalSize = Module['_LZ4_decompress_safe'](LZ4.buf, currChunk, compressedSize, LZ4.CHUNK_SIZE); + var originalSize = Module['_LZ4_decompress_safe'](compressedData.buf, currChunk, compressedSize, LZ4.CHUNK_SIZE);
+ // console.log('decompress time: ' + (Date.now() - t)); + // console.log('decompress time: ' + (Date.now() - t));
if (chunkIndex < compressedData.successes.length-1) assert(originalSize === LZ4.CHUNK_SIZE); // all but the last chunk must be full-size if (chunkIndex < compressedData.successes.length-1) assert(originalSize === LZ4.CHUNK_SIZE); // all but the last chunk must be full-size
} }
...@@ -68,10 +69,9 @@ index 4c3f583b7..bca230feb 100644 ...@@ -68,10 +69,9 @@ index 4c3f583b7..bca230feb 100644
+ else { + else {
// uncompressed // uncompressed
- currChunk = compressedData.data.subarray(compressedStart, compressedStart + LZ4.CHUNK_SIZE); - currChunk = compressedData.data.subarray(compressedStart, compressedStart + LZ4.CHUNK_SIZE);
+ var compressed = compressedData.data.subarray(compressedStart, compressedStart + compressedSize); + var compressed = compressedData.data.subarray(compressedStart, compressedStart + LZ4.CHUNK_SIZE);
+ // var originalSize = LZ4.codec.uncompress(compressed, currChunk); + Module.HEAPU8.set(compressed, compressedData.buf);
+ Module.HEAPU8.set(compressed, LZ4.buf); + currChunk = compressedData.buf;
+ currChunk = LZ4.buf;
} }
var startInChunk = start % LZ4.CHUNK_SIZE; var startInChunk = start % LZ4.CHUNK_SIZE;
var endInChunk = Math.min(startInChunk + desired, LZ4.CHUNK_SIZE); var endInChunk = Math.min(startInChunk + desired, LZ4.CHUNK_SIZE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment