From b79a718fac17da9a2c71008158a9a650176b6fd9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 14 Apr 2005 20:53:09 +0000 Subject: [PATCH] Must count '*' characters as potential arguments. --- src/port/snprintf.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/port/snprintf.c b/src/port/snprintf.c index 38034b519d..04a5eb58b2 100644 --- a/src/port/snprintf.c +++ b/src/port/snprintf.c @@ -62,7 +62,7 @@ * causing nasty effects. **************************************************************/ -/*static char _id[] = "$PostgreSQL: pgsql/src/port/snprintf.c,v 1.26 2005/03/20 13:54:53 momjian Exp $";*/ +/*static char _id[] = "$PostgreSQL: pgsql/src/port/snprintf.c,v 1.27 2005/04/14 20:53:09 tgl Exp $";*/ static void dopr(char *buffer, const char *format, va_list args, char *end); @@ -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);