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:
parent
e535e3fccc
commit
e49d808e1f
7 changed files with 94 additions and 15 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue