tprog = get_pool_memory(PM_FNAME);
pm_strcpy(&tprog, prog);
build_argc_argv(tprog, &bargc, bargv, MAX_ARGV);
-#ifdef xxxxxx
+#ifdef xxxxxx
printf("argc=%d\n", bargc);
int i;
for (i=0; i<bargc; i++) {
sleep(1); /* wait one second */
remaining_wait--;
} else {
- stat = ETIME; /* set timeout, if no other status */
+ stat = 1; /* set error status */
+ errno = ETIME; /* set timed out */
wpid = -1;
break; /* don't wait any longer */
}
}
- if (wpid != -1 && WIFEXITED(chldstatus)) {
- stat = WEXITSTATUS(chldstatus);
+ if (wpid > 0) {
+ if (WIFEXITED(chldstatus)) { /* process exit()ed */
+ stat = WEXITSTATUS(chldstatus);
+ } else if (WIFSIGNALED(chldstatus)) { /* process died */
+ stat = 1;
+ }
if (stat != 0) {
- errno = ECHILD;
+ errno = ECHILD; /* set child errno */
}
- }
+ }
if (bpipe->timer_id) {
stop_child_timer(bpipe->timer_id);
}
*/
static void build_argc_argv(char *cmd, int *bargc, char *bargv[], int max_argv)
{
- int i, quote;
- char *p, *q;
+ int i;
+ char *p, *q, quote;
int argc = 0;
argc = 0;
quote = 0;
while (*p && (*p == ' ' || *p == '\t'))
p++;
- if (*p == '\"') {
- quote = 1;
+ if (*p == '\"' || *p == '\'') {
+ quote = *p;
p++;
}
if (*p) {
while (*p && argc < MAX_ARGV) {
q = p;
if (quote) {
- while (*q && *q != '\"')
+ while (*q && *q != quote)
q++;
quote = 0;
} else {
p = q;
while (*p && (*p == ' ' || *p == '\t'))
p++;
- if (*p == '\"') {
- quote = 1;
+ if (*p == '\"' || *p == '\'') {
+ quote = *p;
p++;
}
}