summaryrefslogtreecommitdiff
path: root/scd/ccid-driver.c
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2022-09-16 07:45:09 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2022-09-16 07:45:09 +0900
commit1e860c1f8b2b0b48617f2ca664aa9acf2fafc8d3 (patch)
treea945f12e0ecb03e7c1db7db427f469b46f5c71f9 /scd/ccid-driver.c
parent0fca6c1d0d6088ff4558a6ffc3bc220998699392 (diff)
downloadgpg2-7e8cdc8644800e891ba4b38bcee30edea8cd6dbf.tar.gz
gpg2-7e8cdc8644800e891ba4b38bcee30edea8cd6dbf.tar.bz2
gpg2-7e8cdc8644800e891ba4b38bcee30edea8cd6dbf.zip
Imported Upstream version 2.2.37upstream/2.2.37
Diffstat (limited to 'scd/ccid-driver.c')
-rw-r--r--scd/ccid-driver.c57
1 files changed, 31 insertions, 26 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c
index 919f685..44c183a 100644
--- a/scd/ccid-driver.c
+++ b/scd/ccid-driver.c
@@ -111,6 +111,10 @@
/* CCID command timeout. */
#define CCID_CMD_TIMEOUT (5*1000)
+/* Number of supported devices. See MAX_READER in apdu.c. */
+#define CCID_MAX_DEVICE 4
+
+
/* Depending on how this source is used we either define our error
output to go to stderr or to the GnuPG based logging functions. We
use the latter when GNUPG_MAJOR_VERSION or GNUPG_SCD_MAIN_HEADER
@@ -261,6 +265,19 @@ struct ccid_driver_s
};
+/* Object to keep infos about found ccid devices. */
+struct ccid_dev_table {
+ int n; /* Index to ccid_usb_dev_list */
+ int interface_number;
+ int setting_number;
+ unsigned char *ifcdesc_extra;
+ int ep_bulk_out;
+ int ep_bulk_in;
+ int ep_intr;
+ size_t ifcdesc_extra_len;
+};
+
+
static int initialized_usb; /* Tracks whether USB has been initialized. */
static int debug_level; /* Flag to control the debug output.
0 = No debugging
@@ -270,6 +287,10 @@ static int debug_level; /* Flag to control the debug output.
*/
static int ccid_usb_thread_is_alive;
+static libusb_device **ccid_usb_dev_list;
+static struct ccid_dev_table ccid_dev_table[CCID_MAX_DEVICE];
+
+
static unsigned int compute_edc (const unsigned char *data, size_t datalen,
int use_crc);
@@ -1323,22 +1344,6 @@ ccid_vendor_specific_pinpad_setup (ccid_driver_t handle)
}
-#define MAX_DEVICE 4 /* See MAX_READER in apdu.c. */
-
-struct ccid_dev_table {
- int n; /* Index to ccid_usb_dev_list */
- int interface_number;
- int setting_number;
- unsigned char *ifcdesc_extra;
- int ep_bulk_out;
- int ep_bulk_in;
- int ep_intr;
- size_t ifcdesc_extra_len;
-};
-
-static libusb_device **ccid_usb_dev_list;
-static struct ccid_dev_table ccid_dev_table[MAX_DEVICE];
-
gpg_error_t
ccid_dev_scan (int *idx_max_p, void **t_p)
{
@@ -1423,7 +1428,7 @@ ccid_dev_scan (int *idx_max_p, void **t_p)
ccid_dev_table[idx].ep_intr = find_endpoint (ifcdesc, 2);
idx++;
- if (idx >= MAX_DEVICE)
+ if (idx >= CCID_MAX_DEVICE)
{
libusb_free_config_descriptor (config);
err = 0;
@@ -1441,15 +1446,15 @@ ccid_dev_scan (int *idx_max_p, void **t_p)
{
for (i = 0; i < idx; i++)
{
- free (ccid_dev_table[idx].ifcdesc_extra);
- ccid_dev_table[idx].n = 0;
- ccid_dev_table[idx].interface_number = 0;
- ccid_dev_table[idx].setting_number = 0;
- ccid_dev_table[idx].ifcdesc_extra = NULL;
- ccid_dev_table[idx].ifcdesc_extra_len = 0;
- ccid_dev_table[idx].ep_bulk_out = 0;
- ccid_dev_table[idx].ep_bulk_in = 0;
- ccid_dev_table[idx].ep_intr = 0;
+ free (ccid_dev_table[i].ifcdesc_extra);
+ ccid_dev_table[i].n = 0;
+ ccid_dev_table[i].interface_number = 0;
+ ccid_dev_table[i].setting_number = 0;
+ ccid_dev_table[i].ifcdesc_extra = NULL;
+ ccid_dev_table[i].ifcdesc_extra_len = 0;
+ ccid_dev_table[i].ep_bulk_out = 0;
+ ccid_dev_table[i].ep_bulk_in = 0;
+ ccid_dev_table[i].ep_intr = 0;
}
libusb_free_device_list (ccid_usb_dev_list, 1);
ccid_usb_dev_list = NULL;