-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathpost.js
43 lines (41 loc) · 1.47 KB
/
post.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Module['gzcompress'] = function(data) { // TODO: Accept strings
var gzFile = ccall('gzopen', 'number', ['string', 'string'], ['output.gz', 'wb']);
var buffer = _malloc(data.length);
HEAPU8.set(data, buffer);
ccall('gzwrite', 'number', ['number', 'number', 'number'], [gzFile, buffer, data.length]);
ccall('gzclose', 'number', ['number'], [gzFile]);
_free(buffer);
var ret = FS.readFile('output.gz');
FS.unlink('output.gz');
return ret;
};
Module['gzdecompress'] = function(data) {
var BUFSIZE = 1024*1024;
FS.writeFile('input.gz', data);
var gzFile = ccall('gzopen', 'number', ['string', 'string'], ['input.gz', 'rb']);
var buffer = _malloc(BUFSIZE);
var chunks = [];
var total = 0;
var len;
while( (len = ccall('gzread', 'number', ['number', 'number', 'number'], [gzFile, buffer, BUFSIZE])) > 0) {
chunks.push(new Uint8Array(len));
chunks[chunks.length-1].set(HEAPU8.subarray(buffer, buffer+len));
total += len;
}
var eof = ccall('gzeof', 'number', ['number'], [gzFile]);
if (len != 0 || !eof) {
var errnum = _malloc(4);
var err = ccall('gzerror', 'string', ['int', 'int'], [gzFile, errnum]);
console.log('Error:', err + " (" + getValue(errnum, 'i32') + ")");
}
ccall('gzclose', 'number', ['number'], [gzFile]);
FS.unlink('input.gz');
_free(buffer);
var ret = new Uint8Array(total);
var curr = 0;
for (var i = 0; i < chunks.length; i++) {
ret.set(chunks[i], curr);
curr += chunks[i].length;
}
return ret;
};