mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
disconnectafter wake-up bug fix by Bob Dunlop.
This commit is contained in:
parent
368170215f
commit
b122c9b6be
@ -1,3 +1,12 @@
|
||||
2006-08-21 Werner Koch <wk@g10code.com>
|
||||
|
||||
* pcsc-wrapper.c (handle_open, handle_close): Reset card and
|
||||
protocol on error/close.
|
||||
(handle_status): Don't set the stae if the state is unknown.
|
||||
(handle_reset): Ignore an error if already disconnected. May
|
||||
happen due to system wake-up after hibernation. Suggested by Bob
|
||||
Dunlop.
|
||||
|
||||
2006-06-28 Werner Koch <wk@g10code.com>
|
||||
|
||||
* app-openpgp.c (do_writekey): Fixed computation of memmove
|
||||
|
@ -474,6 +474,8 @@ handle_open (unsigned char *argbuf, size_t arglen)
|
||||
pcsc_release_context (pcsc_context);
|
||||
free (current_rdrname);
|
||||
current_rdrname = NULL;
|
||||
pcsc_card = 0;
|
||||
pcsc_protocol = 0;
|
||||
request_failed (err);
|
||||
return;
|
||||
}
|
||||
@ -527,6 +529,8 @@ handle_close (unsigned char *argbuf, size_t arglen)
|
||||
free (current_rdrname);
|
||||
current_rdrname = NULL;
|
||||
pcsc_release_context (pcsc_context);
|
||||
pcsc_card = 0;
|
||||
pcsc_protocol = 0;
|
||||
|
||||
request_succeeded (NULL, 0);
|
||||
}
|
||||
@ -567,17 +571,20 @@ handle_status (unsigned char *argbuf, size_t arglen)
|
||||
}
|
||||
|
||||
status = 0;
|
||||
if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) )
|
||||
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. */
|
||||
if ( (status & 6) == 6
|
||||
&& !(rdrstates[0].event_state & PCSC_STATE_INUSE) )
|
||||
status |= 1;
|
||||
|
||||
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;
|
||||
/* We indicate a useful card if it is not in use by another
|
||||
application. This is because we only use exclusive access
|
||||
mode. */
|
||||
if ( (status & 6) == 6
|
||||
&& !(rdrstates[0].event_state & PCSC_STATE_INUSE) )
|
||||
status |= 1;
|
||||
}
|
||||
|
||||
/* First word is identical to the one used by apdu.c. */
|
||||
buf[0] = 0;
|
||||
buf[1] = 0;
|
||||
@ -618,6 +625,8 @@ handle_reset (unsigned char *argbuf, size_t arglen)
|
||||
if (pcsc_card)
|
||||
{
|
||||
err = pcsc_disconnect (pcsc_card, PCSC_LEAVE_CARD);
|
||||
if (err == 0x80100003) /* Invalid handle. (already disconnected) */
|
||||
err = 0;
|
||||
if (err)
|
||||
{
|
||||
fprintf (stderr, PGM": pcsc_disconnect failed: %s (0x%lx)\n",
|
||||
|
Loading…
x
Reference in New Issue
Block a user