diff options
author | NIIBE Yutaka <[email protected]> | 2021-07-21 06:34:34 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2021-07-21 06:59:03 +0000 |
commit | b436fb6766b400167e5d57ff1116600bb496b04f (patch) | |
tree | a63c34cbf96a4a9fd3078183b8d25545205a9da7 /scd/app.c | |
parent | scd: Fix access to list of cards (1/3). (diff) | |
download | gnupg-b436fb6766b400167e5d57ff1116600bb496b04f.tar.gz gnupg-b436fb6766b400167e5d57ff1116600bb496b04f.zip |
scd: Fix access to list of cards (2/3).
* scd/app-common.h (card_reset, select_application): Simplify.
* scd/app.c (card_reset, select_application): Simplify.
* scd/command.c (do_reset): Follow the change.
(open_card, open_card_with_request): Follow the change.
--
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'scd/app.c')
-rw-r--r-- | scd/app.c | 39 |
1 files changed, 14 insertions, 25 deletions
@@ -503,31 +503,20 @@ check_application_conflict (card_t card, const char *name, gpg_error_t -card_reset (card_t card, ctrl_t ctrl, int send_reset) +card_reset (card_t card, ctrl_t ctrl) { gpg_error_t err = 0; + int sw; - if (send_reset) - { - int sw; - - lock_card (card, ctrl); - sw = apdu_reset (card->slot); - if (sw) - err = gpg_error (GPG_ERR_CARD_RESET); - - card->reset_requested = 1; - unlock_card (card); + lock_card (card, ctrl); + sw = apdu_reset (card->slot); + if (sw) + err = gpg_error (GPG_ERR_CARD_RESET); - scd_kick_the_loop (); - gnupg_sleep (1); - } - else - { - ctrl->card_ctx = NULL; - ctrl->current_apptype = APPTYPE_NONE; - card_unref (card); - } + card->reset_requested = 1; + unlock_card (card); + scd_kick_the_loop (); + gnupg_sleep (1); return err; } @@ -780,17 +769,17 @@ app_new_register (int slot, ctrl_t ctrl, const char *name, * NAME and return its card context. Returns an error code and stores * NULL at R_CARD if no application was found or no card is present. */ gpg_error_t -select_application (ctrl_t ctrl, const char *name, card_t *r_card, +select_application (ctrl_t ctrl, const char *name, int scan, const unsigned char *serialno_bin, size_t serialno_bin_len) { gpg_error_t err = 0; card_t card, card_prev = NULL; - *r_card = NULL; - lock_w_card_list (CARD_LIST_LOCK_UPDATE); + ctrl->card_ctx = NULL; + if (scan || !card_top) { struct dev_list *l; @@ -875,7 +864,7 @@ select_application (ctrl_t ctrl, const char *name, card_t *r_card, { /* Note: We do not use card_ref as we are already locked. */ card->ref_count++; - *r_card = card; + ctrl->card_ctx = card; if (card_prev) { card_prev->next = card->next; |