From: J. Ali Harlow Date: Wed, 26 Aug 2009 21:34:00 +0000 (+0100) Subject: Rework spawn's output pipe to avoid writing rubbish X-Git-Tag: 0.2.1~1 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=549f24669a44350b2075b7a42bfef78bbbddd216;p=whelk.git Rework spawn's output pipe to avoid writing rubbish --- diff --git a/configure.ac b/configure.ac index 6c16c9e..d0d5ef8 100644 --- a/configure.ac +++ b/configure.ac @@ -27,7 +27,7 @@ AM_CONDITIONAL(WHELK_MINGW,[test -n "$host_mingw"]) # See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details # LT_CURRENT=1 -LT_REVISION=0 +LT_REVISION=1 LT_AGE=1 AC_SUBST(LT_CURRENT) AC_SUBST(LT_REVISION) diff --git a/whelk/spawn.c b/whelk/spawn.c index ee30c6b..23c0a02 100644 --- a/whelk/spawn.c +++ b/whelk/spawn.c @@ -109,8 +109,11 @@ int whelk_spawn(lua_State *L) whelk_wait_add_object(&wait,stdout_pipe[0]); whelk_wait_add_object(&wait,stderr_pipe[0]); whelk_wait_add_object(&wait,pi.hProcess); - if (standard_input) + if (standard_input && stdin_len) + { + CloseHandle(stdin_pipe[0]); whelk_wait_add_object(&wait,stdin_pipe[1]); + } else { whelk_close_pipe(stdin_pipe); @@ -141,21 +144,24 @@ int whelk_spawn(lua_State *L) break; else if (h==stdin_pipe[1]) { - nb=max(stdin_len,512); - WriteFile(stdin_pipe[1],standard_input,nb,NULL,NULL); - standard_input+=nb; - stdin_len-=nb; + if (WriteFile(stdin_pipe[1],standard_input,stdin_len,&nb,NULL)) + { + standard_input+=nb; + stdin_len-=nb; + } + else + stdin_len=0; if (!stdin_len) { whelk_wait_remove_object(&wait,stdin_pipe[1]); - whelk_close_pipe(stdin_pipe); - standard_input=NULL; + CloseHandle(stdin_pipe[1]); + stdin_pipe[1]=INVALID_HANDLE_VALUE; } } } whelk_wait_free(&wait); - if (standard_input) - whelk_close_pipe(stdin_pipe); + if (stdin_pipe[1]!=INVALID_HANDLE_VALUE) + CloseHandle(stdin_pipe[1]); if (GetExitCodeProcess(pi.hProcess,&nb)) exitcode=(int)nb; else