9 static int cmd_make(char **argv
, int *ifd
, int *ofd
)
18 if (!(pid
= fork())) {
19 if (ifd
) { /* setting up stdin */
25 if (ofd
) { /* setting up stdout */
31 execvp(argv
[0], argv
);
52 char *cmd_pipe(char *cmd
, char *s
)
54 char *argv
[] = {"/bin/sh", "-c", cmd
, NULL
};
61 int pid
= cmd_make(argv
, &ifd
, &ofd
);
66 fds
[0].events
= POLLIN
;
68 fds
[1].events
= POLLOUT
;
69 while ((fds
[0].fd
>= 0 || fds
[1].fd
>= 0) && poll(fds
, 3, 200) >= 0) {
70 if (fds
[0].revents
& POLLIN
) {
71 int ret
= read(fds
[0].fd
, buf
, sizeof(buf
));
73 sbuf_mem(sb
, buf
, ret
);
76 } else if (fds
[0].revents
& (POLLERR
| POLLHUP
| POLLNVAL
)) {
79 if (fds
[1].revents
& POLLOUT
) {
80 int ret
= write(fds
[1].fd
, s
+ nw
, slen
- nw
);
83 if (ret
<= 0 || nw
== slen
)
85 } else if (fds
[1].revents
& (POLLERR
| POLLHUP
| POLLNVAL
)) {
89 waitpid(pid
, NULL
, 0);