summaryrefslogtreecommitdiff
path: root/src/sysdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sysdep.c')
-rw-r--r--src/sysdep.c68
1 files changed, 41 insertions, 27 deletions
diff --git a/src/sysdep.c b/src/sysdep.c
index f97a8585253..ba296a2d094 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -296,7 +296,7 @@ int wait_debugging EXTERNALLY_VISIBLE;
#ifndef MSDOS
static void
-wait_for_termination_1 (int pid, int interruptible)
+wait_for_termination_1 (pid_t pid, int interruptible)
{
while (1)
{
@@ -344,14 +344,14 @@ wait_for_termination_1 (int pid, int interruptible)
make sure it will get eliminated (not remain forever as a zombie) */
void
-wait_for_termination (int pid)
+wait_for_termination (pid_t pid)
{
wait_for_termination_1 (pid, 0);
}
/* Like the above, but allow keyboard interruption. */
void
-interruptible_wait_for_termination (int pid)
+interruptible_wait_for_termination (pid_t pid)
{
wait_for_termination_1 (pid, 1);
}
@@ -1895,8 +1895,8 @@ emacs_close (int fd)
/* Read from FILEDESC to a buffer BUF with size NBYTE, retrying if interrupted.
Return the number of bytes read, which might be less than NBYTE.
On error, set errno and return -1. */
-EMACS_INT
-emacs_read (int fildes, char *buf, EMACS_INT nbyte)
+ptrdiff_t
+emacs_read (int fildes, char *buf, ptrdiff_t nbyte)
{
register ssize_t rtnval;
@@ -1912,11 +1912,11 @@ emacs_read (int fildes, char *buf, EMACS_INT nbyte)
/* Write to FILEDES from a buffer BUF with size NBYTE, retrying if interrupted
or if a partial write occurs. Return the number of bytes written, setting
errno if this is less than NBYTE. */
-EMACS_INT
-emacs_write (int fildes, const char *buf, EMACS_INT nbyte)
+ptrdiff_t
+emacs_write (int fildes, const char *buf, ptrdiff_t nbyte)
{
ssize_t rtnval;
- EMACS_INT bytes_written;
+ ptrdiff_t bytes_written;
bytes_written = 0;
@@ -2151,7 +2151,8 @@ set_file_times (const char *filename, EMACS_TIME atime, EMACS_TIME mtime)
int
mkdir (char *dpath, int dmode)
{
- int cpid, status, fd;
+ pid_t cpid;
+ int status, fd;
struct stat statbuf;
if (stat (dpath, &statbuf) == 0)
@@ -2681,7 +2682,10 @@ system_process_attributes (Lisp_Object pid)
char *cmdline = NULL;
ptrdiff_t cmdsize = 0, cmdline_size;
unsigned char c;
- int proc_id, ppid, uid, gid, pgrp, sess, tty, tpgid, thcount;
+ printmax_t proc_id;
+ int ppid, pgrp, sess, tty, tpgid, thcount;
+ uid_t uid;
+ gid_t gid;
unsigned long long u_time, s_time, cutime, cstime, start;
long priority, niceness, rss;
unsigned long minflt, majflt, cminflt, cmajflt, vsize;
@@ -2692,11 +2696,18 @@ system_process_attributes (Lisp_Object pid)
Lisp_Object attrs = Qnil;
Lisp_Object cmd_str, decoded_cmd, tem;
struct gcpro gcpro1, gcpro2;
- EMACS_INT uid_eint, gid_eint;
CHECK_NUMBER_OR_FLOAT (pid);
- proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid);
- sprintf (procfn, "/proc/%u", proc_id);
+ if (FLOATP (pid))
+ {
+ double v = XFLOAT_DATA (pid);
+ if (! (TYPE_MINIMUM (pid_t) <= v && v < TYPE_MAXIMUM (pid_t) + 1.0))
+ return attrs;
+ proc_id = v;
+ }
+ else
+ proc_id = XINT (pid);
+ sprintf (procfn, "/proc/%"pMd, proc_id);
if (stat (procfn, &st) < 0)
return attrs;
@@ -2704,9 +2715,7 @@ system_process_attributes (Lisp_Object pid)
/* euid egid */
uid = st.st_uid;
- /* Use of EMACS_INT stops GCC whining about limited range of data type. */
- uid_eint = uid;
- attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid_eint)), attrs);
+ attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid)), attrs);
BLOCK_INPUT;
pw = getpwuid (uid);
UNBLOCK_INPUT;
@@ -2714,8 +2723,7 @@ system_process_attributes (Lisp_Object pid)
attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs);
gid = st.st_gid;
- gid_eint = gid;
- attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid_eint)), attrs);
+ attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid)), attrs);
BLOCK_INPUT;
gr = getgrgid (gid);
UNBLOCK_INPUT;
@@ -2955,15 +2963,24 @@ system_process_attributes (Lisp_Object pid)
struct psinfo pinfo;
int fd;
ssize_t nread;
- int proc_id, uid, gid;
+ printmax_t proc_id;
+ uid_t uid;
+ gid_t gid;
Lisp_Object attrs = Qnil;
Lisp_Object decoded_cmd, tem;
struct gcpro gcpro1, gcpro2;
- EMACS_INT uid_eint, gid_eint;
CHECK_NUMBER_OR_FLOAT (pid);
- proc_id = FLOATP (pid) ? XFLOAT_DATA (pid) : XINT (pid);
- sprintf (procfn, "/proc/%u", proc_id);
+ if (FLOATP (pid))
+ {
+ double v = XFLOAT_DATA (pid);
+ if (! (TYPE_MINIMUM (pid_t) <= v && v < TYPE_MAXIMUM (pid_t) + 1.0))
+ return attrs;
+ proc_id = v;
+ }
+ else
+ proc_id = XINT (v);
+ sprintf (procfn, "/proc/%"pMd, proc_id);
if (stat (procfn, &st) < 0)
return attrs;
@@ -2971,9 +2988,7 @@ system_process_attributes (Lisp_Object pid)
/* euid egid */
uid = st.st_uid;
- /* Use of EMACS_INT stops GCC whining about limited range of data type. */
- uid_eint = uid;
- attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid_eint)), attrs);
+ attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (uid)), attrs);
BLOCK_INPUT;
pw = getpwuid (uid);
UNBLOCK_INPUT;
@@ -2981,8 +2996,7 @@ system_process_attributes (Lisp_Object pid)
attrs = Fcons (Fcons (Quser, build_string (pw->pw_name)), attrs);
gid = st.st_gid;
- gid_eint = gid;
- attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid_eint)), attrs);
+ attrs = Fcons (Fcons (Qegid, make_fixnum_or_float (gid)), attrs);
BLOCK_INPUT;
gr = getgrgid (gid);
UNBLOCK_INPUT;