aboutsummaryrefslogtreecommitdiffstats
path: root/src/editfns.c
diff options
context:
space:
mode:
authorEli Zaretskii2009-03-20 17:59:38 +0000
committerEli Zaretskii2009-03-20 17:59:38 +0000
commite00553bf16bacd9ab51ea81f14ded352aad616bd (patch)
treef25e21680e4834b7e56b7575bdf23300e1c4f904 /src/editfns.c
parent51105b132455a6a37633a782823d4c10eae7e0cb (diff)
downloademacs-e00553bf16bacd9ab51ea81f14ded352aad616bd.tar.gz
emacs-e00553bf16bacd9ab51ea81f14ded352aad616bd.zip
(Fuser_uid, Fuser_real_uid): If UID as EMACS_INT is negative, produce
a float value.
Diffstat (limited to 'src/editfns.c')
-rw-r--r--src/editfns.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/editfns.c b/src/editfns.c
index cfce1f2add6..aac670bb35b 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1319,23 +1319,33 @@ This ignores the environment variables LOGNAME and USER, so it differs from
1319 1319
1320DEFUN ("user-uid", Fuser_uid, Suser_uid, 0, 0, 0, 1320DEFUN ("user-uid", Fuser_uid, Suser_uid, 0, 0, 0,
1321 doc: /* Return the effective uid of Emacs. 1321 doc: /* Return the effective uid of Emacs.
1322Value is an integer or float, depending on the value. */) 1322Value is an integer or a float, depending on the value. */)
1323 () 1323 ()
1324{ 1324{
1325 /* Assignment to EMACS_INT stops GCC whining about limited range of 1325 /* Assignment to EMACS_INT stops GCC whining about limited range of
1326 data type. */ 1326 data type. */
1327 EMACS_INT euid = geteuid (); 1327 EMACS_INT euid = geteuid ();
1328
1329 /* Make sure we don't produce a negative UID due to signed integer
1330 overflow. */
1331 if (euid < 0)
1332 return make_float ((double)geteuid ());
1328 return make_fixnum_or_float (euid); 1333 return make_fixnum_or_float (euid);
1329} 1334}
1330 1335
1331DEFUN ("user-real-uid", Fuser_real_uid, Suser_real_uid, 0, 0, 0, 1336DEFUN ("user-real-uid", Fuser_real_uid, Suser_real_uid, 0, 0, 0,
1332 doc: /* Return the real uid of Emacs. 1337 doc: /* Return the real uid of Emacs.
1333Value is an integer or float, depending on the value. */) 1338Value is an integer or a float, depending on the value. */)
1334 () 1339 ()
1335{ 1340{
1336 /* Assignment to EMACS_INT stops GCC whining about limited range of 1341 /* Assignment to EMACS_INT stops GCC whining about limited range of
1337 data type. */ 1342 data type. */
1338 EMACS_INT uid = getuid (); 1343 EMACS_INT uid = getuid ();
1344
1345 /* Make sure we don't produce a negative UID due to signed integer
1346 overflow. */
1347 if (uid < 0)
1348 return make_float ((double)getuid ());
1339 return make_fixnum_or_float (uid); 1349 return make_fixnum_or_float (uid);
1340} 1350}
1341 1351