summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2009-03-20 17:59:38 +0000
committerEli Zaretskii <eliz@gnu.org>2009-03-20 17:59:38 +0000
commite00553bf16bacd9ab51ea81f14ded352aad616bd (patch)
treef25e21680e4834b7e56b7575bdf23300e1c4f904
parent51105b132455a6a37633a782823d4c10eae7e0cb (diff)
downloademacs-e00553bf16bacd9ab51ea81f14ded352aad616bd.tar.gz
(Fuser_uid, Fuser_real_uid): If UID as EMACS_INT is negative, produce
a float value.
-rw-r--r--src/ChangeLog8
-rw-r--r--src/editfns.c14
2 files changed, 20 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8812516e41c..1f95b2846d5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2009-03-20 Eli Zaretskii <eliz@gnu.org>
+
+ * editfns.c (Fuser_uid, Fuser_real_uid): If UID as EMACS_INT is
+ negative, produce a float value.
+
+ * dired.c (make_uid, make_gid): New functions.
+ (Ffile_attributes): Use them to avoid negative UID and GID.
+
2009-03-20 Juanma Barranquero <lekktu@gmail.com>
* keyboard.c (Fcurrent_idle_time): Reflow docstring.
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
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);
}