Must count '*' characters as potential arguments.
authorTom Lane <[email protected]>
Thu, 14 Apr 2005 20:53:09 +0000 (20:53 +0000)
committerTom Lane <[email protected]>
Thu, 14 Apr 2005 20:53:09 +0000 (20:53 +0000)
src/port/snprintf.c

index c48f7336ddcb2a4d60cc64f65029aedc8677f41a..18f6afab59c24e6a915c0b9208c45a656dfad4bd 100644 (file)
@@ -194,7 +194,7 @@ dopr(char *buffer, const char *format, va_list args, char *end)
        int                     precision;
        int                     position;
        char       *output;
-       int                     percents = 1;
+       int                     nargs = 1;
        const char *p;
        struct fmtpar
        {
@@ -220,18 +220,22 @@ dopr(char *buffer, const char *format, va_list args, char *end)
                int                     longlongflag;
        }                  *fmtpar, **fmtparptr;
 
-       /* Create enough structures to hold all arguments */
+       /*
+        * Create enough structures to hold all arguments.  This overcounts,
+        * eg not all '*' characters are necessarily arguments, but it's not
+        * worth being exact.
+        */
        for (p = format; *p != '\0'; p++)
-               if (*p == '%')                  /* counts %% as two, so overcounts */
-                       percents++;
+               if (*p == '%' || *p == '*')
+                       nargs++;
 
        /* Need to use malloc() because memory system might not be started yet. */
-       if ((fmtpar = malloc(sizeof(struct fmtpar) * percents)) == NULL)
+       if ((fmtpar = malloc(sizeof(struct fmtpar) * nargs)) == NULL)
        {
                fprintf(stderr, _("out of memory\n"));
                exit(1);
        }
-       if ((fmtparptr = malloc(sizeof(struct fmtpar *) * percents)) == NULL)
+       if ((fmtparptr = malloc(sizeof(struct fmtpar *) * nargs)) == NULL)
        {
                fprintf(stderr, _("out of memory\n"));
                exit(1);