diff --git a/app.js b/app.js index ceee604..e8c9c01 100644 --- a/app.js +++ b/app.js @@ -188,18 +188,27 @@ if (typeof CreateObject === "undefined") { } if (typeof UseObject === "undefined") { - var UseObject = function(progId, callback) { - var _dispose = function(obj) { - try { - obj.Close(); - } catch (e) { /* ignore */ } - }; + var UseObject = function(progId, callback, dispose, fallback) { + if (typeof callback !== "function") { + return null; + } + + if (typeof dispose !== "function") { + dispose = function(obj) { + try { + obj.Close(); + } catch (e) { /* ignore */ } + }; + } var obj = CreateObject(progId); try { return callback(obj); + } catch (e) { + return (typeof fallback === "function" ? + fallback(obj, e) : null); } finally { - _dispose(obj); + dispose(obj); obj = null; } } diff --git a/lib/pipe-ipc.js b/lib/pipe-ipc.js index 693c24a..779635b 100644 --- a/lib/pipe-ipc.js +++ b/lib/pipe-ipc.js @@ -160,19 +160,22 @@ function Converter() { }; this.repositionObject = function(stream, position) { - position = (position !== "number" ? 0 : position); + position = (typeof position !== "number" ? 0 : position); + + var _dispose = function() {}; // prevent dispose after repositionObject return UseObject("ADODB.Stream", function(newStream) { newStream.Type = adTypeBinary; newStream.Mode = adModeReadWrite; newStream.Open(); + stream.Position = position; stream.CopyTo(newStream); stream.Flush(); stream.Close(); + return newStream; - }); - + }, _dispose); }; } @@ -413,9 +416,12 @@ function PipeIPC() { stream.Charset = charset; stream.Open(); stream.WriteText(str); - stream = (new Converter()).repositionObject(stream, 3); - stream.SaveToFile(dst, adSaveCreateOverWrite); - stream.Close(); + + var newStream = (new Converter()).repositionObject(stream, 3); + newStream.SaveToFile(dst, adSaveCreateOverWrite); + newStream.Close(); + + // will be auto dispose by UseObject }); // Set a result @@ -565,7 +571,7 @@ exports.adSaveCreateNotExist = adSaveCreateNotExist; exports.adSaveCreateOverWrite = adSaveCreateOverWrite; exports.adModeReadWrite = adModeReadWrite; -exports.VERSIONINFO = "PIPE-based IPC Module (pipe-ipc.js) version 0.1.24"; +exports.VERSIONINFO = "PIPE-based IPC Module (pipe-ipc.js) version 0.1.26"; exports.AUTHOR = "gnh1201@catswords.re.kr"; exports.global = global; exports.require = require;