1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

scd: Factor out scd_init_event function.

* scd/scdaemon.c (scd_init_event): New.

--

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
(cherry picked from commit 9aa6faaf10cf6739b0ddf5b42b6181a5c2a0000c)
This commit is contained in:
NIIBE Yutaka 2024-06-24 14:44:07 +09:00 committed by Werner Koch
parent e94f793ebf
commit fc732131a1
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 35 additions and 26 deletions

View File

@ -1028,7 +1028,36 @@ scd_get_socket_name (void)
}
#ifndef HAVE_W32_SYSTEM
#ifdef HAVE_W32_SYSTEM
/* Creat an event into E_P and sets EVENTS to watch by npth_eselect. */
void
scd_init_event (HANDLE *e_p, HANDLE events[2])
{
HANDLE h, h2;
SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
events[0] = *e_p = INVALID_HANDLE_VALUE;
events[1] = INVALID_HANDLE_VALUE;
/* Create event for manual reset, initially non-signaled. Make it
* waitable and inheritable. */
h = CreateEvent (&sa, TRUE, FALSE, NULL);
if (!h)
log_error ("can't create scd event: %s\n", w32_strerror (-1) );
else if (!DuplicateHandle (GetCurrentProcess(), h,
GetCurrentProcess(), &h2,
EVENT_MODIFY_STATE|SYNCHRONIZE, TRUE, 0))
{
log_error ("setting synchronize for scd_kick_the_loop failed: %s\n",
w32_strerror (-1) );
CloseHandle (h);
}
else
{
CloseHandle (h);
events[0] = *e_p = h2;
}
}
#else
static void
handle_signal (int signo)
{
@ -1304,31 +1333,7 @@ handle_connections (gnupg_fd_t listen_fd)
npth_attr_setdetachstate (&tattr, NPTH_CREATE_DETACHED);
#ifdef HAVE_W32_SYSTEM
{
HANDLE h, h2;
SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
events[0] = the_event = INVALID_HANDLE_VALUE;
events[1] = INVALID_HANDLE_VALUE;
/* Create event for manual reset, initially non-signaled. Make it
* waitable and inheritable. */
h = CreateEvent (&sa, TRUE, FALSE, NULL);
if (!h)
log_error ("can't create scd event: %s\n", w32_strerror (-1) );
else if (!DuplicateHandle (GetCurrentProcess(), h,
GetCurrentProcess(), &h2,
EVENT_MODIFY_STATE|SYNCHRONIZE, TRUE, 0))
{
log_error ("setting synchronize for scd_kick_the_loop failed: %s\n",
w32_strerror (-1) );
CloseHandle (h);
}
else
{
CloseHandle (h);
events[0] = the_event = h2;
}
}
scd_init_event (&the_event, events);
#endif
FD_ZERO (&fdset);

View File

@ -138,6 +138,10 @@ struct server_control_s
/*-- scdaemon.c --*/
void scd_exit (int rc);
const char *scd_get_socket_name (void);
#ifdef HAVE_W32_SYSTEM
void scd_init_event (HANDLE *e_p, HANDLE events[2]);
#endif
/*-- command.c --*/
gpg_error_t initialize_module_command (void);