src: fix readers detection logic
- Also, upgrade buffertools that allows to use it only when needed.
This commit is contained in:
@@ -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;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user