Check, or ignore by casting to void, the values returned by system
authorTaylor R. Campbell <net/mumble/campbell>
Tue, 10 Mar 2009 05:13:24 +0000 (05:13 +0000)
committerTaylor R. Campbell <net/mumble/campbell>
Tue, 10 Mar 2009 05:13:24 +0000 (05:13 +0000)
calls in OS_make_subprocess, and kill the child if they fail.  To
change the working directory, the parent really ought to open the
directory to check for errors before calling fchdir(2) in the child,
but this will do for now.

v7/src/microcode/uxproc.c

index e580089b379ff4c6e69f39fc4ce3c141829eea32..2cf47401467cd8b72373175a6ee8c5d3facf3a77 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: uxproc.c,v 1.38 2008/03/09 20:24:33 cph Exp $
+$Id: uxproc.c,v 1.39 2009/03/10 05:13:24 riastradh Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -318,8 +318,8 @@ OS_make_subprocess (const char * filename,
   /* Don't do `transaction_commit ()' here.  Because we used `vfork'
      to spawn the child, the side-effects that are performed by
      `transaction_commit' will occur in the parent as well. */
-  if (working_directory != 0)
-    UX_chdir (working_directory);
+  if ((working_directory != 0) && ((UX_chdir (working_directory)) < 0))
+    goto kill_child;
   {
     int in_fd = (-1);
     int out_fd = (-1);
@@ -414,14 +414,14 @@ OS_make_subprocess (const char * filename,
          : (fd == STDERR_FILENO)
          ? (channel_err_type == process_channel_type_none)
          : 1)
-       UX_close (fd);
+       (void) UX_close (fd);
   }
 
   /* Put the signal mask and handlers in a normal state.  */
   UX_initialize_child_signals ();
 
   /* Start the process. */
-  execve (filename, ((char * const *) argv), ((char * const *) envp));
+  (void) execve (filename, ((char * const *) argv), ((char * const *) envp));
  kill_child:
   _exit (1);
 }