scd PC/SC status fix
NIIBE Yutaka
gniibe at fsij.org
Tue Mar 26 04:54:40 CET 2013
I applied following patch to both branches.
I think that this is long standing bug. It is revealed by the change of
update_reader_status_file.
Built and tested.
* scd/apdu.c (pcsc_get_status_direct): Check PCSC_STATE_MUTE only when
PCSC_STATE_PRESENT.
* scd/pcsc-wrapper.c (handle_status): Ditto.
diff --git a/scd/apdu.c b/scd/apdu.c
index d8f7c5f..4f40a69 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -914,9 +914,11 @@ pcsc_get_status_direct (int slot, unsigned int *status)
*status = 0;
if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) )
- *status |= APDU_CARD_PRESENT;
- if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
- *status |= APDU_CARD_ACTIVE;
+ {
+ *status |= APDU_CARD_PRESENT;
+ if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
+ *status |= APDU_CARD_ACTIVE;
+ }
#ifndef HAVE_W32_SYSTEM
/* We indicate a useful card if it is not in use by another
application. This is because we only use exclusive access
diff --git a/scd/pcsc-wrapper.c b/scd/pcsc-wrapper.c
index 04d08a1..7d9415a 100644
--- a/scd/pcsc-wrapper.c
+++ b/scd/pcsc-wrapper.c
@@ -602,9 +602,11 @@ handle_status (unsigned char *argbuf, size_t arglen)
if ( !(rdrstates[0].event_state & PCSC_STATE_UNKNOWN) )
{
if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) )
- status |= 2;
- if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
- status |= 4;
+ {
+ status |= 2;
+ if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
+ status |= 4;
+ }
/* We indicate a useful card if it is not in use by another
application. This is because we only use exclusive access
mode. */
--
More information about the Gnupg-devel
mailing list