--- ray/src/common/process.c 1991/07/23 15:56:57 1.1 +++ ray/src/common/process.c 1993/04/16 10:26:45 2.4 @@ -23,8 +23,10 @@ static char SCCSid[] = "$SunId$ LBL"; #endif #endif +#include "vfork.h" + #ifndef BSD -#define vfork fork +#include #endif @@ -102,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); } @@ -120,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); }