diff options
Diffstat (limited to '')
-rw-r--r-- | scd/apdu.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/scd/apdu.c b/scd/apdu.c index 9f5d36e09..27304c8b5 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -363,7 +363,7 @@ open_ct_reader (int port) static int close_ct_reader (int slot) { - /* FIXME: Implement. */ + CT_close (slot); reader_table[slot].used = 0; return 0; } @@ -594,7 +594,7 @@ pcsc_send_apdu (int slot, unsigned char *apdu, size_t apdulen, static int close_pcsc_reader (int slot) { - /* FIXME: Implement. */ + pcsc_release_context (reader_table[slot].pcsc.context); reader_table[slot].used = 0; return 0; } @@ -608,6 +608,15 @@ close_pcsc_reader (int slot) Internal CCID driver interface. */ +static const char * +get_ccid_error_string (long err) +{ + if (!err) + return "okay"; + else + return "unknown CCID error"; +} + static int open_ccid_reader (void) { @@ -973,7 +982,7 @@ apdu_open_reader (const char *portstr) pcsc_disconnect = dlsym (handle, "SCardDisconnect"); pcsc_status = dlsym (handle, "SCardStatus"); #ifdef _WIN32 - if (pcsc_status) + if (!pcsc_status) pcsc_status = dlsym (handle, "SCardStatusA"); #endif pcsc_begin_transaction = dlsym (handle, "SCardBeginTransaction"); @@ -1062,7 +1071,7 @@ error_string (int slot, long rc) return ct_error_string (rc); #ifdef HAVE_LIBUSB else if (reader_table[slot].is_ccid) - return "no CCID driver error strings yet"; + return get_ccid_error_string (rc); #endif #ifdef HAVE_OPENSC else if (reader_table[slot].is_osc) |