src: fix readers detection logic

- Also, upgrade buffertools that allows to use it only when needed.
This commit is contained in:
Santiago Gimeno
2014-07-28 13:18:24 +02:00
parent c3b83ed118
commit ef475d882e
2 changed files with 11 additions and 9 deletions

View File

@@ -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;
});
});

View File

@@ -10,7 +10,7 @@
"test": "test"
},
"dependencies": {
"buffertools": "~1.1.1",
"buffertools": "^2.1.2",
"bindings": "~1.1.0"
},
"devDependencies": {