- {
- /* Child died. Do final relaying. */
- struct pipe *p = &pipes[1];
- if (p->out == -1)
- return;
- make_nonblocking (STDOUT_FILENO, false);
- for (;;)
- {
- ssize_t n;
-
- /* Write buffer. */
- while (p->size > 0)
- {
- n = write (p->out, p->buf + p->ofs, p->size);
- if (n < 0)
- fail_io ("write");
- else if (n == 0)
- fail_io ("zero-length write");
- p->ofs += n;
- p->size -= n;
- }
- p->ofs = 0;
-
- p->size = n = read (p->in, p->buf, sizeof p->buf);
- if (n <= 0)
- return;
- }
- }