diff options
author | Werner Koch <[email protected]> | 2011-12-12 19:34:12 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2011-12-12 19:34:12 +0000 |
commit | cd29dc0f1cf7f3bd7938ffa65bf13f9a75d8c156 (patch) | |
tree | b262c6244c3043c43eaf200ea029c71060d77bc9 /scd/command.c | |
parent | gitlog-to-changelog: New option --tear-off. (diff) | |
download | gnupg-cd29dc0f1cf7f3bd7938ffa65bf13f9a75d8c156.tar.gz gnupg-cd29dc0f1cf7f3bd7938ffa65bf13f9a75d8c156.zip |
Fix detection of card removal and insertion.
* scd/apdu.c (apdu_connect): Return status codes for no card available
and inactive card.
* scd/command.c (TEST_CARD_REMOVAL): Also test for GPG_ERR_CARD_RESET.
(open_card): Map apdu_connect status to GPG_ERR_CARD_RESET.
Diffstat (limited to 'scd/command.c')
-rw-r--r-- | scd/command.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/scd/command.c b/scd/command.c index 9bb500523..655032fee 100644 --- a/scd/command.c +++ b/scd/command.c @@ -60,6 +60,7 @@ 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_RESET \ || gpg_err_code (_r) == GPG_ERR_ENODEV ) \ update_card_removed ((c)->reader_slot, 1); \ } while (0) @@ -420,9 +421,8 @@ get_reader_slot (void) return 0; } -/* If the card has not yet been opened, do it. Note that this - function returns an Assuan error, so don't map the error a second - time. */ + +/* If the card has not yet been opened, do it. */ static gpg_error_t open_card (ctrl_t ctrl, const char *apptype) { @@ -477,6 +477,8 @@ open_card (ctrl_t ctrl, const char *apptype) { if (sw == SW_HOST_NO_CARD) err = gpg_error (GPG_ERR_CARD_NOT_PRESENT); + else if (sw == SW_HOST_CARD_INACTIVE) + err = gpg_error (GPG_ERR_CARD_RESET); else err = gpg_error (GPG_ERR_CARD); } |