]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fset_process_filter): Don't crash if the input
authorGerd Moellmann <gerd@gnu.org>
Wed, 7 Mar 2001 12:55:29 +0000 (12:55 +0000)
committerGerd Moellmann <gerd@gnu.org>
Wed, 7 Mar 2001 12:55:29 +0000 (12:55 +0000)
file descriptor of PROCESS is closed.
(Fset_process_window_size): Likewise.

src/ChangeLog
src/process.c

index bb6859cf6a5b167fa1ada6e2be4bc505a4b9513e..ed40b909eac2aba13d232d9065b00bea5c834375 100644 (file)
@@ -1,3 +1,9 @@
+2001-03-07  Gerd Moellmann  <gerd@gnu.org>
+
+       * process.c (Fset_process_filter): Don't crash if the input
+       file descriptor of PROCESS is closed.
+       (Fset_process_window_size): Likewise.
+
 2001-03-06  Kenichi Handa  <handa@etl.go.jp>
 
        * xterm.c (XTflash): Make the timeout of select shorter, and call
index b41478c0bd31213e1c99af9f39859616c29c5841..f1541800004065afaa2287dea9472b856830c5a3 100644 (file)
@@ -734,18 +734,34 @@ If the process has a filter, its buffer is not used for output.")
   (process, filter)
      register Lisp_Object process, filter;
 {
+  struct Lisp_Process *p;
+  
   CHECK_PROCESS (process, 0);
-  if (EQ (filter, Qt))
-    {
-      FD_CLR (XINT (XPROCESS (process)->infd), &input_wait_mask);
-      FD_CLR (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
-    }
-  else if (EQ (XPROCESS (process)->filter, Qt))
+  p = XPROCESS (process);
+
+  /* Don't signal an error if the process' input file descriptor
+     is closed.  This could make debugging Lisp more difficult,
+     for example when doing something like
+
+     (setq process (start-process ...))
+     (debug)
+     (set-process-filter process ...)  */
+  
+  if (XINT (p->infd) >= 0)
     {
-      FD_SET (XINT (XPROCESS (process)->infd), &input_wait_mask);
-      FD_SET (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
+      if (EQ (filter, Qt))
+       {
+         FD_CLR (XINT (p->infd), &input_wait_mask);
+         FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
+       }
+      else if (EQ (XPROCESS (process)->filter, Qt))
+       {
+         FD_SET (XINT (p->infd), &input_wait_mask);
+         FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
+       }
     }
-  XPROCESS (process)->filter = filter;
+  
+  p->filter = filter;
   return filter;
 }
 
@@ -793,8 +809,10 @@ DEFUN ("set-process-window-size", Fset_process_window_size,
   CHECK_PROCESS (process, 0);
   CHECK_NATNUM (height, 0);
   CHECK_NATNUM (width, 0);
-  if (set_window_size (XINT (XPROCESS (process)->infd),
-                      XINT (height), XINT (width)) <= 0)
+  
+  if (XINT (XPROCESS (process)->infd < 0)
+      || set_window_size (XINT (XPROCESS (process)->infd),
+                         XINT (height), XINT (width)) <= 0)
     return Qnil;
   else
     return Qt;