From a076248389c82276e079756bee26c011b03f70f2 Mon Sep 17 00:00:00 2001 From: Byron Rakitzis Date: Mon, 7 Mar 1994 00:00:01 +0000 Subject: beta: rc-1.5betadev1 --- glom.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'glom.c') diff --git a/glom.c b/glom.c index a82183c..d0b1705 100644 --- a/glom.c +++ b/glom.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "rc.h" #if !defined(S_IFIFO) && !defined(DEVFD) #define NOCMDARG @@ -68,11 +69,11 @@ extern List *concat(List *s1, List *s2) { } else { r->m = nalloc(z); if (s1->m == NULL) - clear(r->m, x); + memzero(r->m, x); else memcpy(r->m, s1->m, x); if (s2->m == NULL) - clear(&r->m[x], y); + memzero(&r->m[x], y); else memcpy(&r->m[x], s2->m, y); r->m[z] = 0; @@ -183,7 +184,7 @@ static List *bqinput(List *ifs, int fd) { char isifs[256]; int n, state; /* a simple FSA is used to read in data */ - clear(isifs, sizeof isifs); + memzero(isifs, sizeof isifs); for (isifs['\0'] = TRUE; ifs != NULL; ifs = ifs->n) for (s = ifs->w; *s != '\0'; s++) isifs[*(unsigned char *)s] = TRUE; @@ -209,8 +210,12 @@ static List *bqinput(List *ifs, int fd) { if ((n = rc_read(fd, end, remain)) <= 0) { if (n == 0) /* break */ break; - uerror("backquote read"); - rc_error(NULL); + else if (errno == EINTR) + return NULL; /* interrupted, wait for subproc */ + else { + uerror("backquote read"); + rc_error(NULL); + } } remain -= n; for (bufend = &end[n]; end < bufend; end++) @@ -218,6 +223,7 @@ static List *bqinput(List *ifs, int fd) { if (!isifs[*(unsigned char *)end]) { state = 1; r->w = end; + r->m = NULL; } } else { if (isifs[*(unsigned char *)end]) { @@ -252,7 +258,6 @@ static List *backq(Node *ifs, Node *n) { rc_error(NULL); } if ((pid = rc_fork()) == 0) { - setsigdefaults(FALSE); mvfd(p[1], 1); close(p[0]); redirq = NULL; @@ -264,7 +269,8 @@ static List *backq(Node *ifs, Node *n) { close(p[0]); rc_wait4(pid, &sp, TRUE); statprint(-1, sp); - SIGCHK; + varassign("bqstatus", word(strstatus(sp), NULL), FALSE); + sigchk(); return bq; } -- cgit v1.2.3