version 1.15, 1997/07/25 21:05:38 |
version 1.16, 1997/08/06 06:43:40 |
|
|
int signo; |
int signo; |
{ |
{ |
union wait status; |
union wait status; |
|
int save_errno = errno; |
int pid; |
int pid; |
|
|
for (;;) { |
for (;;) { |
pid = wait3((int *)&status, WNOHANG|WUNTRACED, NULL); |
pid = wait3((int *)&status, WNOHANG|WUNTRACED, NULL); |
if (pid == 0) |
if (pid == 0) |
return; |
break; |
/* if the child (reader) dies, just quit */ |
/* if the child (reader) dies, just quit */ |
if (pid < 0 || (pid == child && !WIFSTOPPED(status))) |
if (pid < 0 || (pid == child && !WIFSTOPPED(status))) |
done((int)(status.w_termsig | status.w_retcode)); |
done((int)(status.w_termsig | status.w_retcode)); |
} |
} |
/* NOTREACHED */ |
errno = save_errno; |
} |
} |
|
|
/* |
/* |
|
|
{ |
{ |
struct termios tty; |
struct termios tty; |
int atmark, n, rcvd; |
int atmark, n, rcvd; |
|
int save_errno = errno; |
char waste[BUFSIZ], mark; |
char waste[BUFSIZ], mark; |
|
|
rcvd = 0; |
rcvd = 0; |
|
|
if (rcvcnt < sizeof(rcvbuf)) { |
if (rcvcnt < sizeof(rcvbuf)) { |
n = read(rem, rcvbuf + rcvcnt, |
n = read(rem, rcvbuf + rcvcnt, |
sizeof(rcvbuf) - rcvcnt); |
sizeof(rcvbuf) - rcvcnt); |
if (n <= 0) |
if (n <= 0) { |
|
errno = save_errno; |
return; |
return; |
|
} |
rcvd += n; |
rcvd += n; |
} else { |
} else { |
n = read(rem, waste, sizeof(waste)); |
n = read(rem, waste, sizeof(waste)); |
if (n <= 0) |
if (n <= 0) { |
|
errno = save_errno; |
return; |
return; |
|
} |
} |
} |
continue; |
continue; |
default: |
default: |
|
errno = save_errno; |
return; |
return; |
} |
} |
} |
} |
|
|
*/ |
*/ |
if (rcvd && rcvstate == READING) |
if (rcvd && rcvstate == READING) |
longjmp(rcvtop, 1); |
longjmp(rcvtop, 1); |
|
errno = save_errno; |
} |
} |
|
|
/* reader: read from remote: line -> 1 */ |
/* reader: read from remote: line -> 1 */ |
|
|
copytochild(signo) |
copytochild(signo) |
int signo; |
int signo; |
{ |
{ |
|
int save_errno = errno; |
(void)kill(child, SIGURG); |
(void)kill(child, SIGURG); |
|
errno = save_errno; |
} |
} |
|
|
void |
void |