aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2024-06-24 05:44:07 +0000
committerNIIBE Yutaka <[email protected]>2024-06-25 06:34:25 +0000
commit9aa6faaf10cf6739b0ddf5b42b6181a5c2a0000c (patch)
treea53b2468e1f46e4ef1d04af4dc4bf1b403f54193
parentgpg: New option --show-only-session-key (diff)
downloadgnupg-9aa6faaf10cf6739b0ddf5b42b6181a5c2a0000c.tar.gz
gnupg-9aa6faaf10cf6739b0ddf5b42b6181a5c2a0000c.zip
scd: Factor out scd_init_event function.
* scd/scdaemon.c (scd_init_event): New. -- Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--scd/scdaemon.c57
-rw-r--r--scd/scdaemon.h4
2 files changed, 35 insertions, 26 deletions
diff --git a/scd/scdaemon.c b/scd/scdaemon.c
index 854ff6653..a52dc5a2f 100644
--- a/scd/scdaemon.c
+++ b/scd/scdaemon.c
@@ -1026,7 +1026,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)
{
@@ -1302,31 +1331,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);
diff --git a/scd/scdaemon.h b/scd/scdaemon.h
index 5076588f0..d6114c9e7 100644
--- a/scd/scdaemon.h
+++ b/scd/scdaemon.h
@@ -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);