po: Update Russian translation
[gnupg.git] / scd / apdu.c
index c8ce684..c50afbd 100644 (file)
 /* This is used with GnuPG version < 1.9.  The code has been source
    copied from the current GnuPG >= 1.9  and is maintained over
    there. */
 /* This is used with GnuPG version < 1.9.  The code has been source
    copied from the current GnuPG >= 1.9  and is maintained over
    there. */
-#include "options.h"
+#include "../common/options.h"
 #include "errors.h"
 #include "memory.h"
 #include "errors.h"
 #include "memory.h"
-#include "util.h"
-#include "i18n.h"
+#include "../common/util.h"
+#include "../common/i18n.h"
 #include "dynload.h"
 #include "cardglue.h"
 #else /* GNUPG_MAJOR_VERSION != 1 */
 #include "scdaemon.h"
 #include "dynload.h"
 #include "cardglue.h"
 #else /* GNUPG_MAJOR_VERSION != 1 */
 #include "scdaemon.h"
-#include "exechelp.h"
+#include "../common/exechelp.h"
 #endif /* GNUPG_MAJOR_VERSION != 1 */
 #endif /* GNUPG_MAJOR_VERSION != 1 */
-#include "host2net.h"
+#include "../common/host2net.h"
 
 #include "iso7816.h"
 #include "apdu.h"
 
 #include "iso7816.h"
 #include "apdu.h"
@@ -94,7 +94,7 @@ struct reader_table_s {
   int used;            /* True if slot is used. */
   unsigned short port; /* Port number:  0 = unused, 1 - dev/tty */
 
   int used;            /* True if slot is used. */
   unsigned short port; /* Port number:  0 = unused, 1 - dev/tty */
 
-  /* Function pointers intialized to the various backends.  */
+  /* Function pointers initialized to the various backends.  */
   int (*connect_card)(int);
   int (*disconnect_card)(int);
   int (*close_reader)(int);
   int (*connect_card)(int);
   int (*disconnect_card)(int);
   int (*close_reader)(int);
@@ -230,7 +230,7 @@ static npth_mutex_t reader_table_lock;
 #define PCSC_E_SERVICE_STOPPED         0x8010001E
 #define PCSC_W_REMOVED_CARD            0x80100069
 
 #define PCSC_E_SERVICE_STOPPED         0x8010001E
 #define PCSC_W_REMOVED_CARD            0x80100069
 
-/* Fix pcsc-lite ABI incompatibilty.  */
+/* Fix pcsc-lite ABI incompatibility.  */
 #ifndef SCARD_CTL_CODE
 #ifdef _WIN32
 #include <winioctl.h>
 #ifndef SCARD_CTL_CODE
 #ifdef _WIN32
 #include <winioctl.h>
@@ -1496,19 +1496,19 @@ open_ccid_reader (struct dev_list *dl)
 
   err = ccid_open_reader (dl->portstr, dl->idx, dl->ccid_table,
                           &slotp->ccid.handle, &slotp->rdrname);
 
   err = ccid_open_reader (dl->portstr, dl->idx, dl->ccid_table,
                           &slotp->ccid.handle, &slotp->rdrname);
-  if (err)
+  if (!err)
     {
     {
-      slotp->used = 0;
-      unlock_slot (slot);
-      return -1;
+      err = ccid_get_atr (slotp->ccid.handle,
+                          slotp->atr, sizeof slotp->atr, &slotp->atrlen);
+      if (err)
+        ccid_close_reader (slotp->ccid.handle);
     }
 
     }
 
-  err = ccid_get_atr (slotp->ccid.handle,
-                      slotp->atr, sizeof slotp->atr, &slotp->atrlen);
   if (err)
     {
   if (err)
     {
-      slotp->atrlen = 0;
-      err = 0;
+      slotp->used = 0;
+      unlock_slot (slot);
+      return -1;
     }
 
   require_get_status = ccid_require_get_status (slotp->ccid.handle);
     }
 
   require_get_status = ccid_require_get_status (slotp->ccid.handle);