diff options
author | NIIBE Yutaka <[email protected]> | 2017-01-26 13:02:41 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-01-26 13:02:41 +0000 |
commit | 881dcdfd84ebad36bff20c895e629025bed9d94e (patch) | |
tree | 09cd09205463d53951090ea06a943172770c4c00 /scd/ccid-driver.c | |
parent | scd: Fix APP reference counting. (diff) | |
download | gnupg-881dcdfd84ebad36bff20c895e629025bed9d94e.tar.gz gnupg-881dcdfd84ebad36bff20c895e629025bed9d94e.zip |
scd: Only submit apdu_get_status when needed.
* scd/apdu.c (apdu_dev_list_finish): Return Boolean value if
all device support INTERRUPT transfer.
* scd/ccid-driver.c (ccid_dev_scan_finish): Likewise.
* scd/app.c (app_new_register): Fix initial value of card_status.
(select_application): Call update_fdset_for_usb.
(scd_update_reader_status_file): Ditto.
* scd/scdaemon.c (update_fdset_for_usb, need_tick): New.
(handle_connections): Call handle_tick when select returns.
Let select watch USB file descriptors, too.
Call libusb_handle_events_timeout_completed for INTERRUPT transfer.
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | scd/ccid-driver.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index ce5539385..8ca8e9646 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -1699,13 +1699,17 @@ ccid_dev_scan (int *idx_max_p, struct ccid_dev_table **t_p) return err; } -void +int ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max) { + int all_have_intr_endp = 1; int i; for (i = 0; i < max; i++) { + if (tbl[i].ep_intr == -1) + all_have_intr_endp = 0; + free (tbl[i].ifcdesc_extra); tbl[i].transport = 0; tbl[i].n = 0; @@ -1719,6 +1723,8 @@ ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max) } libusb_free_device_list (ccid_usb_dev_list, 1); ccid_usb_dev_list = NULL; + + return all_have_intr_endp; } unsigned int |