.
[kopensolaris-gnu/glibc.git] / sunrpc / openchild.c
index 2fa26fa..29ddfa6 100644 (file)
@@ -1,6 +1,3 @@
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)openchild.c        2.3 88/08/15 4.0 RPCSRC; from 1.7 88/02/08 SMI";
-#endif
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
@@ -46,25 +43,28 @@ static char sccsid[] = "@(#)openchild.c     2.3 88/08/15 4.0 RPCSRC; from 1.7 88/02/
 #include <rpc/rpc.h>
 #include <rpc/clnt.h>
 
 #include <rpc/rpc.h>
 #include <rpc/clnt.h>
 
-static char SHELL[] = "/bin/sh";
+#ifdef USE_IN_LIBIO
+# include <libio/iolibio.h>
+# define fflush(s) INTUSE(_IO_fflush) (s)
+# define __fdopen(fd,m) INTUSE(_IO_fdopen) (fd,m)
+#endif
 
 /*
  * returns pid, or -1 for failure
  */
 int
 
 /*
  * returns pid, or -1 for failure
  */
 int
-_openchild (char *command, FILE ** fto, FILE ** ffrom)
+_openchild (const char *command, FILE ** fto, FILE ** ffrom)
 {
   int i;
   int pid;
   int pdto[2];
   int pdfrom[2];
 {
   int i;
   int pid;
   int pdto[2];
   int pdfrom[2];
-  char *com;
 
 
-  if (pipe (pdto) < 0)
+  if (__pipe (pdto) < 0)
     goto error1;
     goto error1;
-  if (pipe (pdfrom) < 0)
+  if (__pipe (pdfrom) < 0)
     goto error2;
     goto error2;
-  switch (pid = vfork ())
+  switch (pid = __fork ())
     {
     case -1:
       goto error3;
     {
     case -1:
       goto error3;
@@ -73,27 +73,26 @@ _openchild (char *command, FILE ** fto, FILE ** ffrom)
       /*
        * child: read from pdto[0], write into pdfrom[1]
        */
       /*
        * child: read from pdto[0], write into pdfrom[1]
        */
-      close (0);
-      dup (pdto[0]);
-      close (1);
-      dup (pdfrom[1]);
+      __close (0);
+      __dup (pdto[0]);
+      __close (1);
+      __dup (pdfrom[1]);
+      fflush (stderr);
       for (i = _rpc_dtablesize () - 1; i >= 3; i--)
       for (i = _rpc_dtablesize () - 1; i >= 3; i--)
-       close (i);
-      com = malloc (strlen (command) + 6);
-      if (com == NULL)
-       _exit (~0);
-      sprintf (com, "exec %s", command);
-      execl (SHELL, basename (SHELL), "-c", com, NULL);
+       __close (i);
+      fflush (stderr);
+      execlp (command, command, NULL);
+      perror ("exec");
       _exit (~0);
 
     default:
       /*
        * parent: write into pdto[1], read from pdfrom[0]
        */
       _exit (~0);
 
     default:
       /*
        * parent: write into pdto[1], read from pdfrom[0]
        */
-      *fto = fdopen (pdto[1], "w");
-      close (pdto[0]);
-      *ffrom = fdopen (pdfrom[0], "r");
-      close (pdfrom[1]);
+      *fto = __fdopen (pdto[1], "w");
+      __close (pdto[0]);
+      *ffrom = __fdopen (pdfrom[0], "r");
+      __close (pdfrom[1]);
       break;
     }
   return pid;
       break;
     }
   return pid;
@@ -102,11 +101,11 @@ _openchild (char *command, FILE ** fto, FILE ** ffrom)
    * error cleanup and return
    */
 error3:
    * error cleanup and return
    */
 error3:
-  close (pdfrom[0]);
-  close (pdfrom[1]);
+  __close (pdfrom[0]);
+  __close (pdfrom[1]);
 error2:
 error2:
-  close (pdto[0]);
-  close (pdto[1]);
+  __close (pdto[0]);
+  __close (pdto[1]);
 error1:
   return -1;
 }
 error1:
   return -1;
 }