diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 791b018..17677d8 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2291,7 +2291,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('identifiers', Buffer.from('eJztG2tz47bxu34FjpOWco6mbGUy01pROn6fmpPtWravGVnjUCQk4Y4iWQK0rDj6790F+BZp++5Sn5MrZ2yJwL6wD2CxgFrfNvb9YBmy6UyQ9tb23zfbW+0t0vMEdcm+HwZ+aAnme43GW2ZTj1OHRJ5DQyJmlOwGlg0fcY9BrmjIAZa0zS3SRAAt7tI2Oo2lH5G5tSSeL0jEKRBgnEyYSwm9s2kgCPOI7c8Dl1meTcmCiZlkEpMwGz/HBPyxsADWAugA3iZ5KGKJRoPAMxMi2Gm1FouFaUkpTT+ctlwFxVtve/uHJ4PDTZC00bj0XMo5Cel/IhbCAMdLYgUgh22NQTrXWhA/JNY0pNAnfJRzETLBvKlBuD8RCyukDYdxEbJxJAoKSqSCkeYBQEWWR7TdAekNNLK3O+gNjMa73sWb08sL8m73/Hz35KJ3OCCn52T/9OSgd9E7PYG3I7J78jP5qXdyYBAK6gEm9C4IUXYQkKHqqGM2BpQWmE98JQwPqM0mzIYRedPImlIy9W9p6MFASEDDOeNoPA6iOQ2XzZmQhufrwzEb37YajUnk2QhAYFjznkM9AcTBAZq3lrvRuJdWANbwGpJbVJpsx1bVhw+bkOYraB/ejshvv5H4W7dL9BPfo3qpTd8g98ShLhU0bu6QlaS1aqxyArnMi+5uWE6kRB6UJddOuuR+1Ul7QipKLcAlonkwKXDsKE19wvUNk96BZflg6dlNvcWXvGW7FuctZ85azNE3UGYxC/0FaerS5QPXEqCXOXF8II3RMLNuKTno9whHlXPBbKCbDA3FAIFDJuUosg6p5TgsrOXdKRiBoRFiUlWGKNJGWWoIt3TyOiE0ZKMNk/EjiOPmxkZKL6OMDyh2mMGPKseBFJ7KT/gDePGmTfgKzteEgRb4qdGUeCZOlXOiEkxnlVJJ3EpSyxxmqI+Zz28cS1BdDUMUmjo1CLfUc/ywhJI01iPJ2XQNK26tQvOt0LnxrHleulxbLQqnIbPcMlLSWou2NqxC6wNo5YEVmysQg9B3IlvcRBH4dYpXbI2dAF3dnjHXybuZbLgBeBtmSxm01JY+q7fGzGvxmW6QoQ4fozhoJAIEgeNHAj5CgvNPp9jse00d7G4Bbjr3NG0V8IxLrNddYufcFYK6TJ95Jq4mKKMlSAtFbNlBxLyJT34jsOgERJv74LAEbahBG0aDBrT162tPJ/oOTJPEWnwgm0c7RL8nAbAS5Js2WenXHkxO4trTCkwXFhOH0N7cqFA0sM4cqKyELNokYqtFjqiwZ+T47JKgwH9o/WsuD2yW6FwnV8e7BFWbafqXRNOgZavLYbkVzW+2DFhuKNfAKLqh/QKqVhaYEG2odeTky7rbHfaD1Xn9mqFwClFiwaxjTIPI0MIdksf8C7++Vv80gwB+d/sfmrajGdoGgg/buPClwCNgs7pOja0/aGwRLkGEgsmneZP/c3B6YgZWyGmzxvqoRAK+CnZv3t3hgFYldxgISBohvej9CVxitiCbci3CBO5DjTtI498Tl3olrzC0b6sdog0O0QX4xCdkhHc16LetAKWW3zn7larGjHTqNyDgPHY4pPkeaL7/wVY032d+hmDD9yND+B8gdzPAiwBBdamm4fbI+ECXhiY9kE2a8AJt3a7mUG6HTIqjIcFENB6NQZEJentktKVP5FHjmVnLxvYEJByuxJDjrkQADImjaIJuMgaxdDHR+O0VgGAWKUFexfBZlN1DhO0rSPi2kwSdAX99xCg3DkCwfNtKMzA622l0xmwNyc/AcaA8v2OwchVbNw69hWScf27MqgTXLObEubdOHkrm1WrtTeRby/xL1OKBAEYUQiQqAGjMp+sLBvnCgt8s5sy+gd1M5AreBNnzSbv0emCdDclUPqxfh5kWERK8CQFVmGyNEjAjD8MMBJP/QKKsXflafkOAwgC1YZJc4F6qyaBlG0KF/KDYmBB0UzHrEAzmUmKNZPzx+9wWQipOMkrFZOtipsxARoDb6qCwwBCHl+MHr3VJNybBcfAA1CjxhAJMEQMfkBXBCzjoY+uUOgXccuqMT5xlA0nzBOIhQ1B6NYOIz5rQG5NaFVxFwShXWfeVus1dvIVL4HZA66tOYRunHAAmRR5/zVo6n7BYxU0m9W6HOnJlmA+/xjVisORA9Lv29fViTOfwH/wbEeW6hi/wReb0+DmlAj9aV7tvLw+fecnLTztZjKCKqnLALO5ykSdXNdxfSrS13SU04ryCfTln7+adXdloKJerLblHlF+3R4lzJN4x1HPGl/NfElnrneX9WsxEPwfPtDg9yG3aapFzm5wEvW950cSywVFp+AT8bLeTEBj093qnA/y7yjY9mUWexfP2dgeHe6e75wd/Dvcj/2v/qzVycdOdmPhMZUAPukd57526h2w6iebjR/yrvAv/aAdd248nFL6cX+4PEtX93y8/xy/XSiaJaS8veweJU5QzOCBUSt+e2fr9w/7p+c/7b3pn+Pa2N7iQ9j86Pe/vXuzsD66+oBPEmjbj5MKc07kfYnZWmcGW5Xt+XZ4O8P/x4QtWoc9loeupKoQIeHYtnu2eX8gTmJfvkLAHFEwd2rxYp9w/u8wrcu+8d3j0cjVqB9HLVeXZ7sUb/HzHvO/aN1cwb/v7vidC33Vh2c9C/wRyE2M/CkOY19/4IfsVgCz3nHLfjWS1Iu6DNV8wO9/zcg0zfcmGwVKhE7Jb+gfydCnvR88brRbpeZDBCnkGgEkwTynn8ggzqTHHtZQ0N8KUahqfdkCWVLJw9SllAWQYY49M9HJURh1rVW54GD07Ty6NLilpH6iyW+UYS6W5qqE6t+VRKrWXB/oIaTWUexKXLncqKA6d25EZ9xtEFjNrwWSvQbC4WQuDnak3xepR5cmyrHZm6tJMiuU4VHO+GKlqkfGY48KPqvqkPj63bP/xik+uH6s+JHeKL533oyeBl3MMoTM/pFOy6bTJpk16p2fxDYLDuwB8U7lkcm4ld3SbzEnPBLvkWk/OAr5pG1h7M4iGJ0vJwQQ2qSOlp9alyybPtsAPHhp+DfrPevOb+C9gDVVW+OrtMc9VQr6AFVRt5qu3Qlxh+iIGUJy/dgtkvVj+eVZD5AtRf0478CW3hUs2Za4yc2iA2Y45Di0P5mFJ4NM0l0ulHrmK83gdryrFavAFgzQs3e8kVxOT/Mq2OCW6PPbVd9LkdA7mdCkYIvBDIU/VyM3p+D21Re9ghxTKkAaZUrGzfiGT5M5CxyG1PnRy/Ba4nf0sfhWnhA9ydKwQUD6L5VqSWsPQoRMLdlQPspIEM7/M3yC99HgUICR1SBLQ8q5oBbtVo0jbZPzAtz9QjIiUetKW5tS4xyr7A3nVTdwg3mFJN5pYLld7pk84OH054atlF+84dSctexr6UZBc9Snc9Nk8wu/ZjLmdzJhYHNBa8QUaNWPiBRqpWm3jXs2k2rbWWX3UPCrVvKaRV/IuNBi4s27hPUsIGi7P/AXFq+wFS8d9p7A6WOBAFdsoaVHFvXZqwM5sp7rmzyV/r59GEs7Zdvlpl5sDHNoNhoG7zB+U4JNutOWZS0z5sSsP63efa+8j53nLW8kxiyGT5aGWWAZUr7ifLG8fx+rXN9YkWJcptj9evAgj2qnsL2k5eVaN+rdKw5TnW3xQh8f9vE1ujqkHWwq7b4V8ZrllzSMCXhlHOx73zX1gJOiVBXuQMQT7drsCHELDo+537TzGiSXYLT0L/btlU/8pBjAdd41fghzj9amY+U5TP6ZCVehkAAxAoIiXUdHeKXoVQlMOZMO8gv0TxNrW4w6kMMDue9FkgpPpcHuEqNvtv5G//pXU9La///738IWPNvjacpdY5PNn75TRp83iMIk/ZQ5f40LDsIoLNv+OXLIVI5hzMMjmlIwhpqsvhaZLBXjHydGP7fTiIbnW0I7XeBFw/Yp2kWl5SUgevOBYnRDGi4NapROXqXeKytJbxbJy1S8uJVf9h1cP9UMb5I9qhoQmvWwOwcec+CohhEby3YRJNt4tl5cYtRJlaGugRfDMz6/6+NMsg/Q82yx5uwL412H/srLj37QcHrGaaoOwYjKuXBorYAu/NVHqKexjs0tI1Zp5FOGT9bOuBtU+oBbeXXo5KsrXWpRT1ZdiuqWBV8dKLRfcjz3goQ8h1NqBhSKy3D2/nB4Vukkf9pbMo8+v9fp9ASpTpQ+o9lc4f5RUU/jxWUk/yclM/Q3WskYTDHlZRlgwN71jYtaMDUr0R6+3fqSm1n8QlilDjjbzHZznss1Up25mbTRaLZJeSgREDKTNH3MXElOAtHaoQPJ3unIwSXlLAa1dLJSQ+fJ8eu1v88f4nhVeKcJCUis5O8hw0iJyDqtQ105QFeCml1S7VWt1MTwjn40wI58fZkp+Xh57qbaXw0/G3fgvUfbXsg==', 'base64'));"); // zip-reader, refer to modules/zip-reader.js - duk_peval_string_noresult(ctx, "addCompressedModule('zip-reader', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('zip-reader', Buffer.from('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', 'base64'));"); // zip-writer, refer to modules/zip-writer.js duk_peval_string_noresult(ctx, "addCompressedModule('zip-writer', Buffer.from('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', 'base64'));"); diff --git a/microscript/ILibDuktape_fs.c b/microscript/ILibDuktape_fs.c index 1575f04..9088bc6 100644 --- a/microscript/ILibDuktape_fs.c +++ b/microscript/ILibDuktape_fs.c @@ -78,6 +78,7 @@ limitations under the License. #define FS_WINDOWS_WriteCallback "\xFF_FSWindowsHandles_WriteCallback" #define FS_WINDOWS_UserBuffer "\xFF_FSWindowsHandles_UserBuffer" #define FS_WINDOWS_WriteUserBuffer "\xFF_FSWindowsHandles_WriteUserBuffer" +#define FS_BUFFER_DESCRIPTOR_PENDING "\xFF_FS_BUFFER_DESCRIPTOR_PENDING" #if defined(_POSIX) && !defined(__APPLE__) typedef struct ILibDuktape_fs_linuxWatcher @@ -230,6 +231,10 @@ FILE* ILibDuktape_fs_getFilePtr(duk_context *ctx, int fd) duk_ret_t ILibDuktape_fs_closeSync(duk_context *ctx) { + if (duk_is_object(ctx, 0) && strcmp(Duktape_GetStringPropertyValue(ctx, 0, "_ObjectID", ""), "fs.bufferDescriptor") == 0) + { + return(0); + } if (duk_is_number(ctx, 0)) { void *tmp = (void*)(uintptr_t)duk_require_uint(ctx, 0); @@ -734,6 +739,30 @@ BOOL ILibDuktape_fs_read_WindowsSink(void *chain, HANDLE h, ILibWaitHandle_Error return(FALSE); } #endif +void ILibDuktape_fs_buffer_fd_read(duk_context *ctx, void ** args, int argsLen) +{ + duk_idx_t top = duk_get_top(ctx); + + duk_eval_string(ctx, "require('fs');"); // [fs] + duk_get_prop_string(ctx, -1, FS_BUFFER_DESCRIPTOR_PENDING); // [fs][array] + while (duk_get_length(ctx, -1) > 0) + { + duk_array_shift(ctx, -1); // [fs][array][obj] + + duk_get_prop_string(ctx, -1, "func"); // [fs][array][obj][func] + duk_eval_string(ctx, "require('fs');"); // [fs][array][obj][func][this] + duk_push_int(ctx, 0); // [fs][array][obj][func][this][err] + duk_get_prop_string(ctx, -4, "bytesRead"); // [fs][array][obj][func][this][err][bytesRead] + duk_get_prop_string(ctx, -5, "buffer"); // [fs][array][obj][func][this][err][bytesRead][buffer] + duk_remove(ctx, -6); // [fs][array][func][this][err][bytesRead][buffer] + if (duk_pcall_method(ctx, 3) != 0) + { + ILibDuktape_Process_UncaughtExceptionEx(ctx, "fs.read.bufferFD.callback() "); + } + duk_pop(ctx); // [fs][array][obj] + } + duk_set_top(ctx, top); +} duk_ret_t ILibDuktape_fs_read(duk_context *ctx) { int top = duk_get_top(ctx); @@ -772,6 +801,36 @@ duk_ret_t ILibDuktape_fs_read(duk_context *ctx) duk_call_method(ctx, 3); return(1); } + if (duk_is_object(ctx, 0) && duk_is_object(ctx, 1) && duk_is_function(ctx, 2)) + { + if (strcmp(Duktape_GetStringPropertyValue(ctx, 0, "_ObjectID", ""), "fs.bufferDescriptor") != 0) { return(ILibDuktape_Error(ctx, "Invalid Parameter")); } + duk_size_t wrbufLen; + char *wrbuf = (char*)Duktape_GetBufferPropertyEx(ctx, 1, "buffer", &wrbufLen); + duk_dup(ctx, 0); // [bufferDescriptor] + int dpos = Duktape_GetIntPropertyValue(ctx, -1, "position", 0); + dpos = Duktape_GetIntPropertyValue(ctx, 1, "position", dpos); + duk_get_prop_string(ctx, -1, "buffer"); // [bufferDescriptor][buffer] + int bufferLength = (int)duk_get_length(ctx, -1); + int length = Duktape_GetIntPropertyValue(ctx, 1, "length", bufferLength); + int offset = Duktape_GetIntPropertyValue(ctx, 1, "offset", 0); + int bytesRead = length < (bufferLength - dpos) ? length : (bufferLength - dpos); + if (bytesRead > ((int)wrbufLen - offset)) { bytesRead = (int)wrbufLen - offset; } + duk_size_t srbufLen; + char *srbuf = (char*)Duktape_GetBufferPropertyEx(ctx, 0, "buffer", &srbufLen); + memcpy_s(wrbuf + offset, bytesRead, srbuf + dpos, bytesRead); + + duk_push_int(ctx, bytesRead); // [bufferDescriptor][buffer][position] + duk_put_prop_string(ctx, -3, "position"); // [bufferDescriptor][buffer] + duk_push_this(ctx); // [bufferDescriptor][buffer][fs] + duk_get_prop_string(ctx, -1, FS_BUFFER_DESCRIPTOR_PENDING); // [bufferDescriptor][buffer][fs][array] + duk_push_object(ctx); // [bufferDescriptor][buffer][fs][array][object] + duk_dup(ctx, 2); duk_put_prop_string(ctx, -2, "func"); + duk_push_int(ctx, bytesRead); duk_put_prop_string(ctx, -2, "bytesRead"); + duk_get_prop_string(ctx, 1, "buffer"); duk_put_prop_string(ctx, -2, "buffer"); + duk_array_push(ctx, -2); // [bufferDescriptor][buffer][fs][array] + ILibDuktape_Immediate(ctx, NULL, 0, ILibDuktape_fs_buffer_fd_read); + return(0); + } if (!(duk_is_number(ctx, 0) && duk_is_object(ctx, 1) && duk_is_function(ctx, 2))) { return(ILibDuktape_Error(ctx, "Invalid Parameters")); } #ifdef WIN32 HANDLE H = (HANDLE)(uintptr_t)duk_require_uint(ctx, 0); @@ -2220,6 +2279,9 @@ void ILibDuktape_fs_PUSH(duk_context *ctx, void *chain) duk_push_object(ctx); // [fs][descriptors] duk_put_prop_string(ctx, -2, FS_FDS); // [fs] + duk_push_array(ctx); + duk_put_prop_string(ctx, -2, FS_BUFFER_DESCRIPTOR_PENDING); + duk_push_object(ctx); duk_put_prop_string(ctx, -2, FS_WINDOWS_HANDLES); diff --git a/modules/zip-reader.js b/modules/zip-reader.js index a9630fc..2d647ce 100644 --- a/modules/zip-reader.js +++ b/modules/zip-reader.js @@ -219,6 +219,7 @@ function zippedObject(table) this._bytesLeft = this._info.compressedSize; this._buffer = Buffer.alloc(4096); console.info1('Local Header @ ' + this._info.offset); + console.info1(' -> Compressed Size = ' + this._bytesLeft); require('fs').read(this._info.fd, { buffer: Buffer.alloc(30), position: this._info.offset }, this._localHeaderSink); }); return (ret); @@ -253,6 +254,7 @@ function zippedObject(table) prom.results.peek().stream.ret = prom; prom.results.peek().stream.on('data', function (c) { + console.info2('DATA: ' + c.length); if (this._buf == null) { this._buf = Buffer.concat([c]); @@ -264,6 +266,7 @@ function zippedObject(table) }); prom.results.peek().stream.on('end', function () { + console.info2('End of current stream'); this.ret.results.peek().buffer = this._buf; this.ret.z._extractAllStreams2(this.ret); }); @@ -323,15 +326,23 @@ function zippedObject(table) function read(path) { - var ret = new promise(function(res,rej){this._res = res; this._rej = rej;}); - if (!require('fs').existsSync(path)) + var ret = new promise(function (res, rej) { this._res = res; this._rej = rej; }); + if (typeof (path) == 'string') { - ret._rej('File not found'); - return (ret); - } + if (!require('fs').existsSync(path)) + { + ret._rej('File not found'); + return (ret); + } - ret._len = require('fs').statSync(path).size; - ret._fd = require('fs').openSync(path, require('fs').constants.O_RDONLY); + ret._len = require('fs').statSync(path).size; + ret._fd = require('fs').openSync(path, require('fs').constants.O_RDONLY); + } + else + { + ret._len = path.length; + ret._fd = { _ObjectID: 'fs.bufferDescriptor', buffer: path, position: 0 }; + } ret._cdr = function _cdr(err, bytesRead, buffer) { var table = {};