1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

Add code to better handle unplugging of a reader.

This commit is contained in:
Werner Koch 2009-07-16 15:54:59 +00:00
parent e535e3fccc
commit e49d808e1f
7 changed files with 94 additions and 15 deletions

View file

@ -54,12 +54,14 @@
#define set_error(e,t) assuan_set_error (ctx, gpg_error (e), (t))
/* Macro to flag a removed card. */
/* Macro to flag a removed card. ENODEV is also tested to catch teh
case of a removed reader. */
#define TEST_CARD_REMOVAL(c,r) \
do { \
int _r = (r); \
if (gpg_err_code (_r) == GPG_ERR_CARD_NOT_PRESENT \
|| gpg_err_code (_r) == GPG_ERR_CARD_REMOVED) \
|| gpg_err_code (_r) == GPG_ERR_CARD_REMOVED \
|| gpg_err_code (_r) == GPG_ERR_ENODEV ) \
update_card_removed ((c)->reader_slot, 1); \
} while (0)
@ -2159,7 +2161,13 @@ update_reader_status_file (int set_card_removed_flag)
continue; /* Not valid or reader not yet open. */
sw_apdu = apdu_get_status (ss->slot, 0, &status, &changed);
if (sw_apdu)
if (sw_apdu == SW_HOST_NO_READER)
{
/* Most likely the _reader_ has been unplugged. */
status = 0;
changed = ss->changed;
}
else if (sw_apdu)
{
/* Get status failed. Ignore that. */
continue;