# HG changeset patch # User J. Ali Harlow # Date 1251322440 -3600 # Node ID 62d265f584c41e2ea02da49be9567b8ebd76bac0 # Parent 0ea90868d987f7a9cb86dfa5572c6012398252db Rework spawn's output pipe to avoid writing rubbish diff -r 0ea90868d987 -r 62d265f584c4 configure.ac --- a/configure.ac Wed Aug 26 14:48:19 2009 +0100 +++ b/configure.ac Wed Aug 26 22:34:00 2009 +0100 @@ -27,7 +27,7 @@ # 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 -r 0ea90868d987 -r 62d265f584c4 whelk/spawn.c --- a/whelk/spawn.c Wed Aug 26 14:48:19 2009 +0100 +++ b/whelk/spawn.c Wed Aug 26 22:34:00 2009 +0100 @@ -109,8 +109,11 @@ 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 @@ 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