--- ray/src/common/process.c 1992/03/19 09:32:02 2.2 +++ ray/src/common/process.c 1993/04/16 10:26:45 2.4 @@ -25,7 +25,11 @@ static char SCCSid[] = "$SunId$ LBL"; #include "vfork.h" +#ifndef BSD +#include +#endif + int open_process(pd, av) /* open communication to separate process */ int pd[3]; @@ -100,14 +104,19 @@ int fd; char *bpos; int siz; { - register int cc, nrem = siz; - + register int cc = 0, nrem = siz; +retry: while (nrem > 0 && (cc = read(fd, bpos, nrem)) > 0) { bpos += cc; nrem -= cc; } - if (cc < 0) + if (cc < 0) { +#ifndef BSD + if (errno == EINTR) /* we were interrupted! */ + goto retry; +#endif return(cc); + } return(siz-nrem); } @@ -118,13 +127,18 @@ int fd; char *bpos; int siz; { - register int cc, nrem = siz; - + register int cc = 0, nrem = siz; +retry: while (nrem > 0 && (cc = write(fd, bpos, nrem)) > 0) { bpos += cc; nrem -= cc; } - if (cc < 0) + if (cc < 0) { +#ifndef BSD + if (errno == EINTR) /* we were interrupted! */ + goto retry; +#endif return(cc); + } return(siz-nrem); }