1 /* ISC license. */
2
3 #include <unistd.h>
4
5 #include <skalibs/types.h>
6 #include <skalibs/strerr2.h>
7 #include <skalibs/djbunix.h>
8 #include <skalibs/exec.h>
9
10 #define USAGE "piperw fdr fdw prog..."
11
main(int argc,char const * const * argv)12 int main (int argc, char const *const *argv)
13 {
14 int fdr, fdw ;
15 int p[2] ;
16 PROG = "piperw" ;
17 if ((argc < 4)
18 || !uint0_scan(argv[1], (unsigned int *)&fdr)
19 || !uint0_scan(argv[2], (unsigned int *)&fdw)
20 || (fdr == fdw))
21 strerr_dieusage(100, USAGE) ;
22 if (pipe(p) == -1)
23 strerr_diefu1sys(111, "create pipe") ;
24 if (p[1] == fdr) p[1] = dup(p[1]) ;
25 if ((p[1] == -1)
26 || (fd_move(fdr, p[0]) == -1)
27 || (fd_move(fdw, p[1]) == -1))
28 strerr_diefu1sys(111, "move fds") ;
29 xexec(argv+3) ;
30 }
31