(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.
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);