| 21 |
|
#include "rtprocess.h" |
| 22 |
|
|
| 23 |
|
|
| 24 |
+ |
SUBPROC sp_inactive; /* zero initialization is fine */ |
| 25 |
+ |
|
| 26 |
+ |
|
| 27 |
|
int |
| 28 |
|
win_nice(int inc) /* simple nice(2) replacement for Windows */ |
| 29 |
|
{ |
| 171 |
|
proc->r = _open_osfhandle((long)hRead, _O_RDONLY|_O_BINARY); |
| 172 |
|
proc->w = _open_osfhandle((long)hWrite, _O_APPEND|_O_BINARY); |
| 173 |
|
proc->pid = PInfo.dwProcessId; |
| 174 |
< |
proc->running = 1; |
| 174 |
> |
proc->flags = PF_RUNNING; |
| 175 |
|
CloseHandle(hCurProc); |
| 176 |
|
/* Windows doesn't tell us the actual buffer size */ |
| 177 |
|
return PIPE_BUF; |
| 185 |
|
if(hRead) CloseHandle(hRead); |
| 186 |
|
if(hWrite) CloseHandle(hWrite); |
| 187 |
|
if(hCurProc) CloseHandle(hCurProc); |
| 188 |
< |
proc->running = 0; |
| 188 |
> |
proc->flags = 0; |
| 189 |
|
return -1; |
| 190 |
|
/* There... Are we happy now? */ |
| 191 |
|
} |
| 280 |
|
char *cmdpath; |
| 281 |
|
char *cmdstr; |
| 282 |
|
|
| 283 |
< |
if (av == NULL || av[0] == NULL) { |
| 283 |
> |
if (av == NULL || av[0] == NULL || proc->flags) { |
| 284 |
|
fputs("Illegal call to open_process()!\n", stderr); |
| 285 |
|
return -1; |
| 286 |
|
} |
| 287 |
|
proc->pid = 0; |
| 285 |
– |
proc->running = 0; |
| 288 |
|
if (av == NULL) { return -1; } |
| 289 |
|
cmdpath = getpath(av[0], getenv("PATH"), X_OK); |
| 290 |
|
cmdstr = quoted_cmdline(cmdpath, av+1); |
| 313 |
|
DWORD pid; |
| 314 |
|
|
| 315 |
|
for (i = 0; i < nproc; i++) { |
| 316 |
< |
if (pd[i].running) { |
| 316 |
> |
if (pd[i].flags & PF_RUNNING) { |
| 317 |
|
ocres = close(pd[i].w); |
| 318 |
|
icres = close(pd[i].r); |
| 319 |
< |
pd[i].running = 0; |
| 319 |
> |
pd[i].flags = 0; |
| 320 |
|
if(ocres != 0 || icres != 0) { |
| 321 |
|
/* something went wrong: enforce infanticide */ |
| 322 |
|
/* other than that, it looks like we want to ignore errors */ |
| 339 |
|
char ret[1024]; |
| 340 |
|
char *command[]= {"word", "gappy word", "\"quoted words\"", "'squoted words'", NULL}; |
| 341 |
|
|
| 342 |
< |
res = open_process(&proc, command) |
| 342 |
> |
proc.flags = 0; |
| 343 |
> |
proc.pid = 0; |
| 344 |
> |
res = open_process(&proc, command) |
| 345 |
|
if (res == 0) { |
| 346 |
|
printf("open_process() failed with return value 0\n"); |
| 347 |
|
return -1; |