@@@ man wip
[mLib] / sys / mdup.3
index 1e1b836..f08c13e 100644 (file)
@@ -26,9 +26,10 @@ mdup \- renumber file descriptors
 .nf
 .B "#include <mLib/mdup.h>"
 
+.ta 2n
 .B "typedef struct {"
-.B "\h'4'int cur;"
-.B "\h'4n'int want;"
+.B "   int cur;"
+.B "   int want;"
 .B "} mdup_fd;"
 
 .BI "int mdup(mdup_fd *" v ", size_t " n ");"
@@ -116,13 +117,14 @@ int i;
 if (pipe(p_in) || pipe(p_out) || pipe(p_err)) goto error;
 if ((kid = fork()) < 0) goto error;
 if (!kid) {
-  if (dup2(p_in[0], STDIN_FILENO) < 0 ||
-      dup2(p_out[1], STDOUT_FILENO) < 0 ||
-      dup2(p_err[2], STDERR_FILENO) < 0 ||
-      close(p_in[0]) || close(p_out[0]) || close(p_err[0]) ||
-      close(p_in[1]) || close(p_out[1]) || close(p_err[1]))
-    _exit(127);
-  execvp("/bin/sh", "sh", "-c", "...", (char *)0);
+.ta 2n 4n 2n+\w'\fBif ('u
+       if (dup2(p_in[0], STDIN_FILENO) < 0 ||
+                       dup2(p_out[1], STDOUT_FILENO) < 0 ||
+                       dup2(p_err[2], STDERR_FILENO) < 0 ||
+                       close(p_in[0]) || close(p_out[0]) || close(p_err[0]) ||
+                       close(p_in[1]) || close(p_out[1]) || close(p_err[1]))
+               _exit(127);
+       execvp("/bin/sh", "sh", "-c", "...", (char *)0);
 }
 \&...
 .VE
@@ -145,6 +147,7 @@ the child.
 Here's how to rewrite the above function using
 .BR mdup .
 .VS
+.ta 2n 4n 2n+\w'\fBmd[0].cur = p_out[1]; 'u
 #define P_INIT { \-1, \-1 }
 int p_in[2] = P_INIT, p_out[2] = P_INIT, p_err[2] = P_INIT;
 pid_t kid = -1;
@@ -154,13 +157,13 @@ int i;
 if (pipe(p_in) || pipe(p_out) || pipe(p_err)) goto error;
 if ((kid = fork()) < 0) goto error;
 if (!kid) {
-  if (close(p_in[1] || close(p_out[0]) || close(p_err[0]))
-    goto _exit(127);
-  md[0].cur = p_in[0];  md[0].want = STDIN_FILENO;
-  md[1].cur = p_out[1]; md[1].want = STDOUT_FILENO;
-  md[2].cur = p_err[1]; md[2].want = STDERR_FILENO;
-  if (mdup(md, 3)) _exit(127);
-  execvp("/bin/sh", "sh", "-c", "...", (char *)0);
+       if (close(p_in[1] || close(p_out[0]) || close(p_err[0]))
+               goto _exit(127);
+       md[0].cur = p_in[0];            md[0].want = STDIN_FILENO;
+       md[1].cur = p_out[1];           md[1].want = STDOUT_FILENO;
+       md[2].cur = p_err[1];           md[2].want = STDERR_FILENO;
+       if (mdup(md, 3)) _exit(127);
+       execvp("/bin/sh", "sh", "-c", "...", (char *)0);
 }
 \&...
 .VE