mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
SCD changes for PC/SC under W32.
This commit is contained in:
parent
c1329ec7c6
commit
d0ca953014
36 changed files with 10449 additions and 8846 deletions
|
@ -1,3 +1,8 @@
|
|||
2008-10-14 Werner Koch <wk@g10code.com>
|
||||
|
||||
* gpg-agent.c (get_agent_scd_notify_event): Need to use a manual
|
||||
reset event.
|
||||
|
||||
2008-09-29 Werner Koch <wk@g10code.com>
|
||||
|
||||
* agent.h (GCRY_MD_USER): Rename to GCRY_MODULE_ID_USER.
|
||||
|
|
|
@ -378,8 +378,10 @@ start_scd (ctrl_t ctrl)
|
|||
char buf[100];
|
||||
|
||||
#ifdef HAVE_W32_SYSTEM
|
||||
snprintf (buf, sizeof buf, "OPTION event-signal=%lx",
|
||||
(unsigned long)get_agent_scd_notify_event ());
|
||||
/* Use estream snprintf due to a bug in mingw32 related to the l
|
||||
modifier. */
|
||||
estream_snprintf (buf, sizeof buf, "OPTION event-signal=%lx",
|
||||
(unsigned long)get_agent_scd_notify_event ());
|
||||
#else
|
||||
snprintf (buf, sizeof buf, "OPTION event-signal=%d", SIGUSR2);
|
||||
#endif
|
||||
|
|
|
@ -1268,12 +1268,34 @@ get_agent_scd_notify_event (void)
|
|||
|
||||
if (!the_event)
|
||||
{
|
||||
HANDLE h, h2;
|
||||
SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
|
||||
|
||||
the_event = CreateEvent ( &sa, FALSE, FALSE, NULL);
|
||||
if (!the_event)
|
||||
/* We need to use manual reset evet object due to the way our
|
||||
w32-pth wait function works: If we would use an automatic
|
||||
reset event we are not able to figure out which handle has
|
||||
been signaled because at the time we single out the signaled
|
||||
handles using WFSO the event has already been reset due to
|
||||
the WFMO. */
|
||||
h = CreateEvent (&sa, TRUE, FALSE, NULL);
|
||||
if (!h)
|
||||
log_error ("can't create scd notify event: %s\n", w32_strerror (-1) );
|
||||
else if (!DuplicateHandle (GetCurrentProcess(), h,
|
||||
GetCurrentProcess(), &h2,
|
||||
EVENT_MODIFY_STATE|SYNCHRONIZE, TRUE, 0))
|
||||
{
|
||||
log_error ("setting syncronize for scd notify event failed: %s\n",
|
||||
w32_strerror (-1) );
|
||||
CloseHandle (h);
|
||||
}
|
||||
else
|
||||
{
|
||||
CloseHandle (h);
|
||||
the_event = h2;
|
||||
}
|
||||
}
|
||||
|
||||
log_debug ("returning notify handle %p\n", the_event);
|
||||
return the_event;
|
||||
}
|
||||
#endif /*HAVE_W32_SYSTEM*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue