aboutsummaryrefslogtreecommitdiffstats
path: root/common/exechelp-w32.c
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-10-18 12:04:54 +0000
committerJustus Winter <[email protected]>2016-10-18 16:54:49 +0000
commit05a1e412332dd980353a4e3e59bc75ba40bae7fc (patch)
treec0b107cfe7ece697e9d2e4dc8993802106c90bea /common/exechelp-w32.c
parentcommon,w32: Extend gnupg_create_inbound_pipe et al. (diff)
downloadgnupg-05a1e412332dd980353a4e3e59bc75ba40bae7fc.tar.gz
gnupg-05a1e412332dd980353a4e3e59bc75ba40bae7fc.zip
common,w32: Communicate with child in non-blocking mode.
* common/exechelp-w32.c (gnupg_spawn_process): Open streams in non-blocking mode if requested. Fixes-commit: 83811e3f1f0c615b2b63bafdb49a35a0fc198088 Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'common/exechelp-w32.c')
-rw-r--r--common/exechelp-w32.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/common/exechelp-w32.c b/common/exechelp-w32.c
index c5d6b08da..19e4d9e72 100644
--- a/common/exechelp-w32.c
+++ b/common/exechelp-w32.c
@@ -418,6 +418,7 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
int i;
es_syshd_t syshd;
gpg_err_source_t errsource = default_errsource;
+ int nonblock = !!(flags & GNUPG_SPAWN_NONBLOCK);
(void)except; /* Not yet used. */
@@ -440,7 +441,7 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
syshd.type = ES_SYSHD_HANDLE;
syshd.u.handle = inpipe[1];
- infp = es_sysopen (&syshd, "w");
+ infp = es_sysopen (&syshd, nonblock? "w,nonblock" : "w");
if (!infp)
{
err = gpg_err_make (errsource, gpg_err_code_from_syserror ());
@@ -464,7 +465,7 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
syshd.type = ES_SYSHD_HANDLE;
syshd.u.handle = outpipe[0];
- outfp = es_sysopen (&syshd, "r");
+ outfp = es_sysopen (&syshd, nonblock? "r,nonblock" : "r");
if (!outfp)
{
err = gpg_err_make (errsource, gpg_err_code_from_syserror ());
@@ -494,7 +495,7 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
syshd.type = ES_SYSHD_HANDLE;
syshd.u.handle = errpipe[0];
- errfp = es_sysopen (&syshd, "r");
+ errfp = es_sysopen (&syshd, nonblock? "r,nonblock" : "r");
if (!errfp)
{
err = gpg_err_make (errsource, gpg_err_code_from_syserror ());