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');
|
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;
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
Reference in New Issue
Block a user