* apdu.c (close_ct_reader, close_pcsc_reader): Implemented.
authorWerner Koch <wk@gnupg.org>
Fri, 31 Oct 2003 12:12:36 +0000 (12:12 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 31 Oct 2003 12:12:36 +0000 (12:12 +0000)
(get_ccid_error_string): New.  Not very useful messages, though.

scd/ChangeLog
scd/apdu.c
scd/ccid-driver.c

index 0b683d5..d3282b3 100644 (file)
@@ -1,5 +1,13 @@
+2003-10-30  Werner Koch  <wk@gnupg.org>
+
+       * apdu.c (close_ct_reader, close_pcsc_reader): Implemented.
+       (get_ccid_error_string): New.  Not very useful messages, though.
+
 2003-10-25  Werner Koch  <wk@gnupg.org>
 
+       * ccid-driver.c (ccid_open_reader): Return an error if no USB
+       devices are found.
+
        * command.c (cmd_genkey, cmd_passwd): Fixed faulty use of
        !spacep().
 
index 9f5d36e..27304c8 100644 (file)
@@ -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)
index 8868a2c..099dae2 100644 (file)
@@ -494,6 +494,9 @@ ccid_open_reader (ccid_driver_t *handle, int readerno)
      shallow copy of the list created internally by usb_init ? */
   usb_free_match (match);
 
+  if (!rc && !*handle)
+    rc = -1; /* In case we didn't enter the while lool at all. */
+
   return rc;
 }