diff options
author | Andreas Schwab <schwab@suse.de> | 2007-11-23 13:25:23 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2007-11-23 13:25:23 +0000 |
commit | a614a43b87c60b253cc7ed609d1dcfbb48ee4744 (patch) | |
tree | b2a1aa0957ebd81b47df9ef3c371b463f4c77069 /src/editfns.c | |
parent | cf41ab32b342184d9611fbbfac5061dc867e2e50 (diff) | |
download | emacs-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.c | 35 |
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 |