changeset 102632:1287a731cd99

(Ffile_attributes): Make sure UID and GID are always positive, even if the value is too large for a positive EMACS_INT. Doc fix.
author Eli Zaretskii <eliz@gnu.org>
date Wed, 18 Mar 2009 20:37:34 +0000
parents f13c449487ad
children eda48a2d4855
files src/dired.c
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/dired.c	Wed Mar 18 20:37:06 2009 +0000
+++ b/src/dired.c	Wed Mar 18 20:37:34 2009 +0000
@@ -906,8 +906,8 @@
 Elements of the attribute list are:
  0. t for directory, string (name linked to) for symbolic link, or nil.
  1. Number of links to file.
- 2. File uid as a string or an integer.  If a string value cannot be
-  looked up, the integer value is returned.
+ 2. File uid as a string or a number.  If a string value cannot be
+  looked up, a numeric value, either an integer or a float, is returned.
  3. File gid, likewise.
  4. Last access time, as a list of two integers.
   First integer has high-order 16 bits of time, second has low 16 bits.
@@ -980,8 +980,16 @@
   gid = s.st_gid;
   if (NILP (id_format) || EQ (id_format, Qinteger))
     {
-      values[2] = make_fixnum_or_float (uid);
-      values[3] = make_fixnum_or_float (gid);
+      if (sizeof (s.st_uid) > sizeof (uid) || uid < 0
+	  || FIXNUM_OVERFLOW_P (uid))
+	values[2] = make_float ((double)s.st_uid);
+      else
+	values[2] = make_number (uid);
+      if (sizeof (s.st_gid) > sizeof (gid) || gid < 0
+	  || FIXNUM_OVERFLOW_P (gid))
+	values[3] = make_float ((double)s.st_gid);
+      else
+	values[3] = make_number (gid);
     }
   else
     {