diff options
author | Marcus Brinkmann <[email protected]> | 2012-01-19 21:27:44 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2012-01-25 13:50:47 +0000 |
commit | ccbb4c3652ee72386b8889358b829e256e1ebcda (patch) | |
tree | 3ca143583d70d57d70eb68cc24cf7498a59afa08 /agent | |
parent | Port to npth. (diff) | |
download | gnupg-ccbb4c3652ee72386b8889358b829e256e1ebcda.tar.gz gnupg-ccbb4c3652ee72386b8889358b829e256e1ebcda.zip |
Port Windows code to NPTH.
* agent/gpg-agent.c (get_agent_ssh_socket_name): Use
INVALID_HANDLE_VALUE instead of 0.
(handle_signal) [!HAVE_W32_SYSTEM]: Don't define.
(handle_connections): Port Windows code to NPTH.
* dirmngr/dirmngr.c (handle_connections): Port Windows code to NPTH.
* g13/g13.c (handle_connections): Port Windows code to NPTH.
* scd/scdaemon.c (handle_connections): Port Windows code to NPTH.
Diffstat (limited to 'agent')
-rw-r--r-- | agent/gpg-agent.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 72638a63d..ed4b17f99 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -1391,9 +1391,9 @@ get_agent_ssh_socket_name (void) void * get_agent_scd_notify_event (void) { - static HANDLE the_event; + static HANDLE the_event = INVALID_HANDLE_VALUE; - if (!the_event) + if (the_event == INVALID_HANDLE_VALUE) { HANDLE h, h2; SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE}; @@ -1717,6 +1717,7 @@ agent_sigusr2_action (void) } +#ifndef HAVE_W32_SYSTEM /* The signal handler for this program. It is expected to be run in its own trhead and not in the context of a signal handler. */ static void @@ -1769,7 +1770,7 @@ handle_signal (int signo) log_info ("signal %d received - no action defined\n", signo); } } - +#endif /* Check the nonce on a new connection. This is a NOP unless we we are using our Unix domain socket emulation under Windows. */ @@ -1849,7 +1850,6 @@ static void handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh) { npth_attr_t tattr; - int signo; struct sockaddr_un paddr; socklen_t plen; fd_set fdset, read_fdset; @@ -1860,6 +1860,10 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh) struct timespec abstime; struct timespec curtime; struct timespec timeout; +#ifdef HAVE_W32_SYSTEM + HANDLE events[2]; + int events_set; +#endif ret = npth_attr_init(&tattr); /* FIXME: Check error. */ @@ -1879,9 +1883,8 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh) sigs = 0; ev = pth_event (PTH_EVENT_SIGS, &sigs, &signo); # else - sigs = 0; - ev = pth_event (PTH_EVENT_HANDLE, get_agent_scd_notify_event ()); - signo = 0; + events[0] = get_agent_scd_notify_event (); + events[1] = INVALID_HANDLE_VALUE; # endif #endif @@ -1929,16 +1932,19 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh) } npth_timersub (&abstime, &curtime, &timeout); +#ifndef HAVE_W32_SYSTEM ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask()); saved_errno = errno; -#ifndef HAVE_W32_SYSTEM while (npth_sigev_get_pending(&signo)) handle_signal (signo); -#endif +#else + events_set = 0; + ret = npth_eselect (nfd+1, &read_fdset, NULL, NULL, &timeout, events, &events_set); + saved_errno = errno; -#if defined(HAVE_W32_SYSTEM) && defined(PTH_EVENT_HANDLE) - if (pth_event_occurred (ev)) + /* This is valid even if npth_eselect returns an error. */ + if (events_set & 1) agent_sigusr2_action (); #endif @@ -2023,7 +2029,7 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh) } else { - pthread_t thread; + npth_t thread; agent_init_default_ctrl (ctrl); ctrl->thread_startup.fd = fd; |