]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fformat): Correctly format EMACS_INT values.
authorAndreas Schwab <schwab@suse.de>
Thu, 15 Nov 2007 23:45:21 +0000 (23:45 +0000)
committerAndreas Schwab <schwab@suse.de>
Thu, 15 Nov 2007 23:45:21 +0000 (23:45 +0000)
src/ChangeLog
src/editfns.c

index 1899b577f74d1218a6bcaaacaaefdd93e2368534..c6c2db23f12cf29ef912956b29652da0472e4a9b 100644 (file)
@@ -1,3 +1,7 @@
+2007-11-15  Andreas Schwab  <schwab@suse.de>
+
+       * editfns.c (Fformat): Correctly format EMACS_INT values.
+
 2007-11-15  Juanma Barranquero  <lekktu@gmail.com>
 
        * macfns.c (Fx_create_frame, Fx_display_pixel_width)
index 6c6742d242e972044dc172f2b96097118f839a5d..fb9c1c96b59905b3c9b269fe185902586c04140c 100644 (file)
@@ -3803,23 +3803,35 @@ usage: (format STRING &rest OBJECTS)  */)
                     format - this_format_start);
              this_format[format - this_format_start] = 0;
 
-             if (INTEGERP (args[n]))
+             if (format[-1] == 'e' || format[-1] == 'f' || format[-1] == 'g')
+               sprintf (p, this_format, XFLOAT_DATA (args[n]));
+             else
                {
-                 if (format[-1] == 'd')
-                   sprintf (p, this_format, XINT (args[n]));
-                 /* Don't sign-extend for octal or hex printing.  */
+                 if (sizeof (EMACS_INT) > sizeof (int))
+                   {
+                     /* Insert 'l' before format spec.  */
+                     this_format[format - this_format_start]
+                       = this_format[format - this_format_start - 1];
+                     this_format[format - this_format_start - 1] = 'l';
+                     this_format[format - this_format_start + 1] = 0;
+                   }
+
+                 if (INTEGERP (args[n]))
+                   {
+                     if (format[-1] == 'd')
+                       sprintf (p, this_format, XINT (args[n]));
+                     /* Don't sign-extend for octal or hex printing.  */
+                     else
+                       sprintf (p, this_format, XUINT (args[n]));
+                   }
+                 else if (format[-1] == 'd')
+                   /* Maybe we should use "%1.0f" instead so it also works
+                      for values larger than MAXINT.  */
+                   sprintf (p, this_format, (EMACS_INT) XFLOAT_DATA (args[n]));
                  else
-                   sprintf (p, this_format, XUINT (args[n]));
+                   /* Don't sign-extend for octal or hex printing.  */
+                   sprintf (p, this_format, (EMACS_UINT) XFLOAT_DATA (args[n]));
                }
-             else if (format[-1] == 'e' || format[-1] == 'f' || format[-1] == 'g')
-               sprintf (p, this_format, XFLOAT_DATA (args[n]));
-             else if (format[-1] == 'd')
-               /* Maybe we should use "%1.0f" instead so it also works
-                  for values larger than MAXINT.  */
-               sprintf (p, this_format, (EMACS_INT) XFLOAT_DATA (args[n]));
-             else
-               /* Don't sign-extend for octal or hex printing.  */
-               sprintf (p, this_format, (EMACS_UINT) XFLOAT_DATA (args[n]));
 
              if (p > buf
                  && multibyte