| Index: lib/io.js |
| =================================================================== |
| --- a/lib/io.js |
| +++ b/lib/io.js |
| @@ -23,17 +23,17 @@ let {Services} = Cu.import("resource://g |
| let {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", null); |
| let {OS} = Cu.import("resource://gre/modules/osfile.jsm", null); |
| let {Task} = Cu.import("resource://gre/modules/Task.jsm", null); |
| let {Prefs} = require("prefs"); |
| let {Utils} = require("utils"); |
| let firstRead = true; |
| -const BUFFER_SIZE = 0x8000; // 32kB |
| +const BUFFER_SIZE = 0x80000; // 512kB |
| let IO = exports.IO = |
| { |
| /** |
| * Retrieves the platform-dependent line break string. |
| */ |
| get lineBreak() |
| { |
| @@ -145,17 +145,16 @@ let IO = exports.IO = |
| error = e; |
| return; |
| } |
| callback(e); |
| }; |
| let decoder = new TextDecoder(); |
| - let array = new Uint8Array(BUFFER_SIZE); |
| Task.spawn(function() |
| { |
| if (firstRead && Services.vc.compare(Utils.platformVersion, "23.0a1") <= 0) |
| { |
| // See https://issues.adblockplus.org/ticket/530 - the first file |
| // opened cannot be closed due to Gecko bug 858723. Make sure that |
| // our patterns.ini file doesn't stay locked by opening a dummy file |
| // first. |
| @@ -168,29 +167,25 @@ let IO = exports.IO = |
| catch (e) |
| { |
| // Dummy might be locked already, we don't care |
| } |
| } |
| firstRead = false; |
| let f = yield OS.File.open(file.path, {read: true}); |
| - let numBytes; |
| - do |
| + while (true) |
| { |
| - numBytes = yield f.readTo(array); |
| - if (numBytes) |
| - { |
| - let data = decoder.decode(numBytes == BUFFER_SIZE ? |
| - array : |
| - array.subarray(0, numBytes), {stream: true}); |
| - onProgress(data); |
| - } |
| - } while (numBytes); |
| + let array = yield f.read(BUFFER_SIZE); |
| + if (!array.length) |
| + break; |
| + let data = decoder.decode(array, {stream: true}); |
| + onProgress(data); |
| + } |
| yield f.close(); |
| }.bind(this)).then(onSuccess, onError); |
| } |
| catch (e) |
| { |
| callback(e); |
| } |
| }, |