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