mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-27 08:43:40 -07:00
(Fformat): Correctly format EMACS_INT values.
This commit is contained in:
parent
3b58b87349
commit
f52fcaa4f3
2 changed files with 31 additions and 15 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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] == '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] == 'e' || format[-1] == 'f' || format[-1] == 'g')
|
||||
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 (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
|
||||
/* Don't sign-extend for octal or hex printing. */
|
||||
sprintf (p, this_format, (EMACS_UINT) XFLOAT_DATA (args[n]));
|
||||
}
|
||||
|
||||
if (p > buf
|
||||
&& multibyte
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue