aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorPaul Eggert2011-10-10 23:42:38 -0700
committerPaul Eggert2011-10-10 23:42:38 -0700
commitd44287d4adc1e268ef9974ea72010f0186f40197 (patch)
tree6f569186f6bb6f789ef9b1cce64b0086ba1ecd30 /src/process.c
parent58c8a77dd99a19052bf813198db4257865d32ac8 (diff)
downloademacs-d44287d4adc1e268ef9974ea72010f0186f40197.tar.gz
emacs-d44287d4adc1e268ef9974ea72010f0186f40197.zip
* process.c (Fsignal_process): Simplify by avoiding a goto.
Treat out-of-range process numbers just like invalid numbers that fit into the pid_t range, and return -1.
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c59
1 files changed, 28 insertions, 31 deletions
diff --git a/src/process.c b/src/process.c
index ab01728e215..ea433d2c373 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5958,50 +5958,47 @@ SIGCODE may be an integer, or a symbol whose name is a signal name. */)
5958{ 5958{
5959 pid_t pid; 5959 pid_t pid;
5960 5960
5961 if (INTEGERP (process))
5962 {
5963 CHECK_TYPE_RANGED_INTEGER (pid_t, process);
5964 pid = XINT (process);
5965 goto got_it;
5966 }
5967
5968 if (FLOATP (process))
5969 {
5970 double v = XFLOAT_DATA (process);
5971 if (! (TYPE_MINIMUM (pid_t) <= v && v < TYPE_MAXIMUM (pid_t) + 1.0))
5972 args_out_of_range_3 (process,
5973 make_fixnum_or_float (TYPE_MINIMUM (pid_t)),
5974 make_fixnum_or_float (TYPE_MAXIMUM (pid_t)));
5975 pid = v;
5976 goto got_it;
5977 }
5978
5979 if (STRINGP (process)) 5961 if (STRINGP (process))
5980 { 5962 {
5981 Lisp_Object tem = Fget_process (process); 5963 Lisp_Object tem = Fget_process (process);
5982 if (NILP (tem)) 5964 if (NILP (tem))
5983 { 5965 {
5984 EMACS_INT v = XINT (Fstring_to_number (process, make_number (10))); 5966 Lisp_Object process_number =
5985 if (0 < v && v <= TYPE_MAXIMUM (pid_t)) 5967 string_to_number (SSDATA (process), 10, 1);
5986 { 5968 if (INTEGERP (process_number) || FLOATP (process_number))
5987 pid = v; 5969 tem = process_number;
5988 goto got_it;
5989 }
5990 } 5970 }
5991 process = tem; 5971 process = tem;
5992 } 5972 }
5993 else 5973 else if (!NUMBERP (process))
5994 process = get_process (process); 5974 process = get_process (process);
5995 5975
5996 if (NILP (process)) 5976 if (NILP (process))
5997 return process; 5977 return process;
5998 5978
5999 CHECK_PROCESS (process); 5979 if (INTEGERP (process))
6000 pid = XPROCESS (process)->pid; 5980 {
6001 if (pid <= 0) 5981 EMACS_INT v = XINT (process);
6002 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name)); 5982 if (! (TYPE_MINIMUM (pid_t) <= v && v <= TYPE_MAXIMUM (pid_t)))
6003 5983 return make_number (-1);
6004 got_it: 5984 pid = v;
5985 }
5986 else if (FLOATP (process))
5987 {
5988 double v = XFLOAT_DATA (process);
5989 if (! (TYPE_MINIMUM (pid_t) <= v && v < TYPE_MAXIMUM (pid_t) + 1.0))
5990 return make_number (-1);
5991 pid = v;
5992 if (pid != v)
5993 return make_number (-1);
5994 }
5995 else
5996 {
5997 CHECK_PROCESS (process);
5998 pid = XPROCESS (process)->pid;
5999 if (pid <= 0)
6000 error ("Cannot signal process %s", SDATA (XPROCESS (process)->name));
6001 }
6005 6002
6006#define parse_signal(NAME, VALUE) \ 6003#define parse_signal(NAME, VALUE) \
6007 else if (!xstrcasecmp (name, NAME)) \ 6004 else if (!xstrcasecmp (name, NAME)) \