Mercurial > emacs
changeset 102662:aa16e7d76321
(Fuser_uid, Fuser_real_uid): If UID as EMACS_INT is negative, produce
a float value.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Fri, 20 Mar 2009 17:58:44 +0000 |
parents | a2aaf6402fc7 |
children | d1ec6937e20b |
files | src/editfns.c |
diffstat | 1 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/editfns.c Fri Mar 20 17:58:10 2009 +0000 +++ b/src/editfns.c Fri Mar 20 17:58:44 2009 +0000 @@ -1319,23 +1319,33 @@ DEFUN ("user-uid", Fuser_uid, Suser_uid, 0, 0, 0, doc: /* Return the effective uid of Emacs. -Value is an integer or float, depending on the value. */) +Value is an integer or a float, depending on the value. */) () { /* Assignment to EMACS_INT stops GCC whining about limited range of data type. */ EMACS_INT euid = geteuid (); + + /* Make sure we don't produce a negative UID due to signed integer + overflow. */ + if (euid < 0) + return make_float ((double)geteuid ()); return make_fixnum_or_float (euid); } DEFUN ("user-real-uid", Fuser_real_uid, Suser_real_uid, 0, 0, 0, doc: /* Return the real uid of Emacs. -Value is an integer or float, depending on the value. */) +Value is an integer or a float, depending on the value. */) () { /* Assignment to EMACS_INT stops GCC whining about limited range of data type. */ EMACS_INT uid = getuid (); + + /* Make sure we don't produce a negative UID due to signed integer + overflow. */ + if (uid < 0) + return make_float ((double)getuid ()); return make_fixnum_or_float (uid); }