From ce56412f598794a5ae6b67c92efd9f0609798b48 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Wed, 7 Mar 2001 12:55:01 +0000 Subject: [PATCH] (Fset_process_filter): Don't crash if the input file descriptor of PROCESS is closed. (Fset_process_window_size): Likewise. --- src/process.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/process.c b/src/process.c index b41478c0bd3..f1541800004 100644 --- a/src/process.c +++ b/src/process.c @@ -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; -- 2.11.4.GIT