1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-02-07 17:33:02 +01:00

scd: More fix with PC/SC for Windows.

* scd/apdu.c (pcsc_get_status): Return status based on CURRENT_STATUS.
Add debug log.

--

GnuPG-bug-id: 3825
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2018-03-09 08:56:50 +09:00
parent f8b8b6aac2
commit 1e27c0e04c

View File

@ -667,27 +667,29 @@ pcsc_get_status (int slot, unsigned int *status, int on_wire)
return pcsc_error_to_sw (err); return pcsc_error_to_sw (err);
} }
reader_table[slot].pcsc.current_state = if ((rdrstates[0].event_state & PCSC_STATE_CHANGED))
(rdrstates[0].event_state & ~PCSC_STATE_CHANGED); reader_table[slot].pcsc.current_state =
(rdrstates[0].event_state & ~PCSC_STATE_CHANGED);
/* log_debug */ if (DBG_CARD_IO)
/* ("pcsc_get_status_change: %s%s%s%s%s%s%s%s%s%s\n", */ log_debug
/* (rdrstates[0].event_state & PCSC_STATE_IGNORE)? " ignore":"", */ ("pcsc_get_status_change: %s%s%s%s%s%s%s%s%s%s\n",
/* (rdrstates[0].event_state & PCSC_STATE_CHANGED)? " changed":"", */ (rdrstates[0].event_state & PCSC_STATE_IGNORE)? " ignore":"",
/* (rdrstates[0].event_state & PCSC_STATE_UNKNOWN)? " unknown":"", */ (rdrstates[0].event_state & PCSC_STATE_CHANGED)? " changed":"",
/* (rdrstates[0].event_state & PCSC_STATE_UNAVAILABLE)?" unavail":"", */ (rdrstates[0].event_state & PCSC_STATE_UNKNOWN)? " unknown":"",
/* (rdrstates[0].event_state & PCSC_STATE_EMPTY)? " empty":"", */ (rdrstates[0].event_state & PCSC_STATE_UNAVAILABLE)?" unavail":"",
/* (rdrstates[0].event_state & PCSC_STATE_PRESENT)? " present":"", */ (rdrstates[0].event_state & PCSC_STATE_EMPTY)? " empty":"",
/* (rdrstates[0].event_state & PCSC_STATE_ATRMATCH)? " atr":"", */ (rdrstates[0].event_state & PCSC_STATE_PRESENT)? " present":"",
/* (rdrstates[0].event_state & PCSC_STATE_EXCLUSIVE)? " excl":"", */ (rdrstates[0].event_state & PCSC_STATE_ATRMATCH)? " atr":"",
/* (rdrstates[0].event_state & PCSC_STATE_INUSE)? " unuse":"", */ (rdrstates[0].event_state & PCSC_STATE_EXCLUSIVE)? " excl":"",
/* (rdrstates[0].event_state & PCSC_STATE_MUTE)? " mute":"" ); */ (rdrstates[0].event_state & PCSC_STATE_INUSE)? " unuse":"",
(rdrstates[0].event_state & PCSC_STATE_MUTE)? " mute":"" );
*status = 0; *status = 0;
if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) ) if ( (reader_table[slot].pcsc.current_state & PCSC_STATE_PRESENT) )
{ {
*status |= APDU_CARD_PRESENT; *status |= APDU_CARD_PRESENT;
if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) ) if ( !(reader_table[slot].pcsc.current_state & PCSC_STATE_MUTE) )
*status |= APDU_CARD_ACTIVE; *status |= APDU_CARD_ACTIVE;
} }
#ifndef HAVE_W32_SYSTEM #ifndef HAVE_W32_SYSTEM
@ -696,7 +698,7 @@ pcsc_get_status (int slot, unsigned int *status, int on_wire)
mode. */ mode. */
if ( (*status & (APDU_CARD_PRESENT|APDU_CARD_ACTIVE)) if ( (*status & (APDU_CARD_PRESENT|APDU_CARD_ACTIVE))
== (APDU_CARD_PRESENT|APDU_CARD_ACTIVE) == (APDU_CARD_PRESENT|APDU_CARD_ACTIVE)
&& !(rdrstates[0].event_state & PCSC_STATE_INUSE) ) && !(reader_table[slot].pcsc.current_state & PCSC_STATE_INUSE) )
*status |= APDU_CARD_USABLE; *status |= APDU_CARD_USABLE;
#else #else
/* Some winscard drivers may set EXCLUSIVE and INUSE at the same /* Some winscard drivers may set EXCLUSIVE and INUSE at the same