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'); var events = require('events');
require('buffertools'); var bt = require('buffertools');
/* Make sure we choose the correct build directory */ /* Make sure we choose the correct build directory */
var bindings = require('bindings')('pcsclite'); var bindings = require('bindings')('pcsclite');
@@ -12,7 +12,7 @@ var parse_readers_string = function(readers_str) {
var pos; var pos;
var readers = []; var readers = [];
var ini = 0; 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()); readers.push(readers_str.slice(ini, ini + pos).toString());
ini += pos + 1; ini += pos + 1;
} }
@@ -30,17 +30,21 @@ module.exports = function() {
return p.emit('error', err); return p.emit('error', err);
} }
var readers_aux = [];
var names = parse_readers_string(data); 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; return reader.name !== name;
}); });
}); });
readers = readers.filter(function(reader) {
return names.indexOf(reader.name) !== -1;
});
new_names.forEach(function(name) { new_names.forEach(function(name) {
var r = new CardReader(name); var r = new CardReader(name);
readers_aux.push(r); readers.push(r);
r.get_status(function(err, state, atr) { r.get_status(function(err, state, atr) {
if (err) { if (err) {
return r.emit('error', e); return r.emit('error', e);
@@ -57,8 +61,6 @@ module.exports = function() {
p.emit('reader', r); p.emit('reader', r);
}); });
readers = readers_aux;
}); });
}); });

View File

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