diff options
| author | Paul Eggert | 2011-10-10 23:42:38 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-10-10 23:42:38 -0700 |
| commit | d44287d4adc1e268ef9974ea72010f0186f40197 (patch) | |
| tree | 6f569186f6bb6f789ef9b1cce64b0086ba1ecd30 /src/process.c | |
| parent | 58c8a77dd99a19052bf813198db4257865d32ac8 (diff) | |
| download | emacs-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.c | 59 |
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)) \ |