aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/process.c59
2 files changed, 33 insertions, 33 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 232475c2af5..00845a4c188 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,4 +1,4 @@
12011-10-08 Paul Eggert <eggert@cs.ucla.edu> 12011-10-11 Paul Eggert <eggert@cs.ucla.edu>
2 2
3 Fix integer width and related issues. 3 Fix integer width and related issues.
4 * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): 4 * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp):
@@ -556,8 +556,11 @@
556 * process.c (Fdelete_process): Don't assume pid fits into EMACS_INT. 556 * process.c (Fdelete_process): Don't assume pid fits into EMACS_INT.
557 (Fset_process_window_size, Fformat_network_address) 557 (Fset_process_window_size, Fformat_network_address)
558 (get_lisp_to_sockaddr_size, set_socket_option, Fmake_network_process) 558 (get_lisp_to_sockaddr_size, set_socket_option, Fmake_network_process)
559 (Fsignal_process, sigchld_handler): 559 (sigchld_handler):
560 Check that fixnums are in proper range for system types. 560 Check that fixnums are in proper range for system types.
561 (Fsignal_process): Simplify by avoiding a goto.
562 Treat out-of-range process numbers just like invalid numbers
563 that fit into the pid_t range, and return -1.
561 (Fformat_network_address, read_process_output, send_process) 564 (Fformat_network_address, read_process_output, send_process)
562 (Fprocess_send_region, status_notify): 565 (Fprocess_send_region, status_notify):
563 Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. 566 Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
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)) \