summaryrefslogtreecommitdiff
path: root/src/editfns.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2007-11-23 13:25:23 +0000
committerAndreas Schwab <schwab@suse.de>2007-11-23 13:25:23 +0000
commita614a43b87c60b253cc7ed609d1dcfbb48ee4744 (patch)
treeb2a1aa0957ebd81b47df9ef3c371b463f4c77069 /src/editfns.c
parentcf41ab32b342184d9611fbbfac5061dc867e2e50 (diff)
downloademacs-a614a43b87c60b253cc7ed609d1dcfbb48ee4744.tar.gz
(Fformat): Handle %c specially since it requires the
argument to be of type int.
Diffstat (limited to 'src/editfns.c')
-rw-r--r--src/editfns.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/editfns.c b/src/editfns.c
index 008cc3a95bf..f5b71f2aa18 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3807,7 +3807,8 @@ usage: (format STRING &rest OBJECTS) */)
sprintf (p, this_format, XFLOAT_DATA (args[n]));
else
{
- if (sizeof (EMACS_INT) > sizeof (int))
+ if (sizeof (EMACS_INT) > sizeof (int)
+ && format[-1] != 'c')
{
/* Insert 'l' before format spec. */
this_format[format - this_format_start]
@@ -3816,21 +3817,25 @@ usage: (format STRING &rest OBJECTS) */)
this_format[format - this_format_start + 1] = 0;
}
- if (INTEGERP (args[n]))
- {
- if (format[-1] == 'd')
- sprintf (p, this_format, XINT (args[n]));
+ if (INTEGERP (args[n]))
+ {
+ if (format[-1] == 'c')
+ sprintf (p, this_format, (int) XINT (args[n]));
+ else 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] == 'c')
+ sprintf (p, this_format, (int) 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. */
- 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]));
+ sprintf (p, this_format, (EMACS_UINT) XFLOAT_DATA (args[n]));
}
if (p > buf