diff src/editfns.c @ 79472:daa9b2b4d89d

(Fformat): Handle %c specially since it requires the argument to be of type int.
author Andreas Schwab <schwab@suse.de>
date Fri, 23 Nov 2007 13:27:12 +0000
parents 576665ace786
children fc2bcd2a8aad
line wrap: on
line diff
--- a/src/editfns.c	Thu Nov 22 12:45:49 2007 +0000
+++ b/src/editfns.c	Fri Nov 23 13:27:12 2007 +0000
@@ -3809,7 +3809,8 @@
 		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]
@@ -3820,12 +3821,16 @@
 
 		  if (INTEGERP (args[n]))
 		    {
-		      if (format[-1] == 'd')
+		      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.  */