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);
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