* process.c (Fsignal_process): Check for process-ids out of pid_t range rather than...
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 13 Oct 2011 07:00:35 +0000 (00:00 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 13 Oct 2011 07:00:35 +0000 (00:00 -0700)
src/ChangeLog
src/process.c

index 5826a4b..9bcbc92 100644 (file)
        (sigchld_handler):
        Check that fixnums are in proper range for system types.
        (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.
+       Check for process-ids out of pid_t range rather than relying on
+       undefined behavior.
        (Fformat_network_address, read_process_output, send_process)
        (Fprocess_send_region, status_notify):
        Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough.
index ea433d2..8270a57 100644 (file)
@@ -5976,22 +5976,8 @@ SIGCODE may be an integer, or a symbol whose name is a signal name.  */)
   if (NILP (process))
     return process;
 
-  if (INTEGERP (process))
-    {
-      EMACS_INT v = XINT (process);
-      if (! (TYPE_MINIMUM (pid_t) <= v && v <= TYPE_MAXIMUM (pid_t)))
-       return make_number (-1);
-      pid = v;
-    }
-  else if (FLOATP (process))
-    {
-      double v = XFLOAT_DATA (process);
-      if (! (TYPE_MINIMUM (pid_t) <= v && v < TYPE_MAXIMUM (pid_t) + 1.0))
-       return make_number (-1);
-      pid = v;
-      if (pid != v)
-       return make_number (-1);
-    }
+  if (NUMBERP (process))
+    CONS_TO_INTEGER (process, pid_t, pid);
   else
     {
       CHECK_PROCESS (process);