diff --git a/lib/pcsclite.js b/lib/pcsclite.js index f1da892..a37107e 100644 --- a/lib/pcsclite.js +++ b/lib/pcsclite.js @@ -1,5 +1,5 @@ var events = require('events'); -require('buffertools'); +var bt = require('buffertools'); /* Make sure we choose the correct build directory */ var bindings = require('bindings')('pcsclite'); @@ -12,7 +12,7 @@ var parse_readers_string = function(readers_str) { var pos; var readers = []; var ini = 0; - while ((pos = readers_str.slice(ini).indexOf('\0')) > 0) { + while ((pos = bt.indexOf(readers_str.slice(ini), '\0')) > 0) { readers.push(readers_str.slice(ini, ini + pos).toString()); ini += pos + 1; } @@ -30,17 +30,21 @@ module.exports = function() { return p.emit('error', err); } - var readers_aux = []; var names = parse_readers_string(data); - var new_names = names.filter(function(name) { - return !readers.some(function(reader) { + + var new_names = readers.length === 0 ? names : names.filter(function(name) { + return readers.every(function(reader) { return reader.name !== name; }); }); + readers = readers.filter(function(reader) { + return names.indexOf(reader.name) !== -1; + }); + new_names.forEach(function(name) { var r = new CardReader(name); - readers_aux.push(r); + readers.push(r); r.get_status(function(err, state, atr) { if (err) { return r.emit('error', e); @@ -57,8 +61,6 @@ module.exports = function() { p.emit('reader', r); }); - - readers = readers_aux; }); }); diff --git a/package.json b/package.json index 764eea2..f519a7c 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "test": "test" }, "dependencies": { - "buffertools": "~1.1.1", + "buffertools": "^2.1.2", "bindings": "~1.1.0" }, "devDependencies": {