Avoid erroneous syscalls
authorAndreas Schwab <schwab@linux-m68k.org>
Wed, 30 Jun 2010 23:07:11 +0000 (01:07 +0200)
committerAndreas Schwab <schwab@linux-m68k.org>
Wed, 30 Jun 2010 23:07:11 +0000 (01:07 +0200)
* process.c (create_process): Avoid using invalid file descriptors.

* callproc.c (child_setup): Avoid closing a file descriptor twice.

src/ChangeLog
src/callproc.c
src/process.c

index c86c285..0d17a8f 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-30  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * process.c (create_process): Avoid using invalid file descriptors.
+
+       * callproc.c (child_setup): Avoid closing a file descriptor twice.
+
 2010-06-30  Jan Djärv  <jan.h.d@swipnet.se>
 
        * xsettings.c (Ffont_get_system_normal_font, Ffont_get_system_font):
index 82a5ebb..cd06ad5 100644 (file)
@@ -1244,8 +1244,10 @@ child_setup (in, out, err, new_argv, set_pgrp, current_dir)
   dup2 (out, 1);
   dup2 (err, 2);
   emacs_close (in);
-  emacs_close (out);
-  emacs_close (err);
+  if (out != in)
+    emacs_close (out);
+  if (err != in && err != out)
+    emacs_close (err);
 #endif /* not MSDOS */
 #endif /* not WINDOWSNT */
 
index 22b85ff..24f3122 100644 (file)
@@ -2038,7 +2038,7 @@ create_process (process, new_argv, current_dir)
           process_set_signal to fail on SGI when using a pipe.  */
        setsid ();
        /* Make the pty's terminal the controlling terminal.  */
-       if (pty_flag)
+       if (pty_flag && xforkin >= 0)
          {
 #ifdef TIOCSCTTY
            /* We ignore the return value
@@ -2081,8 +2081,11 @@ create_process (process, new_argv, current_dir)
            /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
               I can't test it since I don't have 4.3.  */
            int j = emacs_open ("/dev/tty", O_RDWR, 0);
-           ioctl (j, TIOCNOTTY, 0);
-           emacs_close (j);
+           if (j >= 0)
+             {
+               ioctl (j, TIOCNOTTY, 0);
+               emacs_close (j);
+             }
 #ifndef USG
            /* In order to get a controlling terminal on some versions
               of BSD, it is necessary to put the process in pgrp 0