m4-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Changes to m4/src/Attic/format.c,v [branch-1_4]


From: Eric Blake
Subject: Changes to m4/src/Attic/format.c,v [branch-1_4]
Date: Mon, 09 Jul 2007 12:54:29 +0000

CVSROOT:        /sources/m4
Module name:    m4
Branch:         branch-1_4
Changes by:     Eric Blake <ericb>      07/07/09 12:54:27

Index: src/format.c
===================================================================
RCS file: /sources/m4/m4/src/Attic/format.c,v
retrieving revision 1.1.1.1.2.7
retrieving revision 1.1.1.1.2.8
diff -u -b -r1.1.1.1.2.7 -r1.1.1.1.2.8
--- src/format.c        29 May 2007 13:19:47 -0000      1.1.1.1.2.7
+++ src/format.c        9 Jul 2007 12:54:27 -0000       1.1.1.1.2.8
@@ -85,9 +85,9 @@
 
   /* Buffer and stuff.  */
   char *str;                   /* malloc'd buffer of formatted text */
-  enum {INT, LONG, DOUBLE, STR} datatype;
+  enum {CHAR, INT, LONG, DOUBLE, STR} datatype;
 
-  f = fmt = (const char *) ARG_STR (argc, argv);
+  f = fmt = ARG_STR (argc, argv);
   memset (ok, 0, sizeof ok);
   for (;;)
     {
@@ -176,13 +176,11 @@
          fmt++;
        }
       else
-       {
          while (isdigit (to_uchar (*fmt)))
            {
              width = 10 * width + *fmt - '0';
              fmt++;
            }
-       }
 
       /* Maximum precision; an explicit negative precision is the same
         as not giving the precision.  A lone '.' is a precision of 0.  */
@@ -238,14 +236,13 @@
            fmt--;
          continue;
        }
-      *p++ = c;
-      *p = '\0';
 
       /* Specifiers.  We don't yet recognize C, S, n, or p.  */
       switch (c)
        {
        case 'c':
-         datatype = INT;
+         datatype = CHAR;
+         p -= 2; /* %.*c is undefined, so undo the '.*'.  */
          break;
 
        case 's':
@@ -275,9 +272,15 @@
        default:
          abort ();
        }
+      *p++ = c;
+      *p = '\0';
 
-      switch(datatype)
+      switch (datatype)
        {
+       case CHAR:
+         str = xasprintf (fstart, width, ARG_INT(argc, argv));
+         break;
+
        case INT:
          str = xasprintf (fstart, width, prec, ARG_INT(argc, argv));
          break;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]