From 5a18a126c4f56be16e59c5b4901366aa7162945e Mon Sep 17 00:00:00 2001 Message-Id: <5a18a126c4f56be16e59c5b4901366aa7162945e.1714559878.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sun, 13 Jan 2002 13:30:50 +0000 Subject: [PATCH] Change interface for @dstr_vputf@. Organization: Straylight/Edgeware From: mdw --- dputf.c | 33 ++++++++++++++++++--------------- dstr.h | 9 ++++++--- man/dstr.3 | 15 +++++++++------ 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/dputf.c b/dputf.c index bb0641c..ba23d98 100644 --- a/dputf.c +++ b/dputf.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: dputf.c,v 1.4 2001/06/22 19:35:29 mdw Exp $ + * $Id: dputf.c,v 1.5 2002/01/13 13:30:48 mdw Exp $ * * `printf'-style formatting for dynamic strings * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: dputf.c,v $ + * Revision 1.5 2002/01/13 13:30:48 mdw + * Change interface for @dstr_vputf@. + * * Revision 1.4 2001/06/22 19:35:29 mdw * Find out whether @@ exists (hack for uC-Linux). * @@ -74,7 +77,7 @@ * * Arguments: @dstr *d@ = pointer to a dynamic string block * @const char *p@ = pointer to @printf@-style format string - * @va_list ap@ = argument handle + * @va_list *ap@ = argument handle * * Returns: The number of characters written to the string. * @@ -82,7 +85,7 @@ * supplied functions with @printf@-style interfaces. */ -int dstr_vputf(dstr *d, const char *p, va_list ap) +int dstr_vputf(dstr *d, const char *p, va_list *ap) { const char *q = p; size_t n = d->len; @@ -164,7 +167,7 @@ int dstr_vputf(dstr *d, const char *p, va_list ap) getnum: *ip = 0; if (*p == '*') { - *ip = va_arg(ap, int); + *ip = va_arg(*ap, int); DENSURE(&dd, DSTR_PUTFSTEP); dd.len += sprintf(dd.buf + dd.len, "%i", *ip); } else { @@ -191,10 +194,10 @@ int dstr_vputf(dstr *d, const char *p, va_list ap) DENSURE(d, sz); if (f & f_long) d->len += sprintf(d->buf + d->len, dd.buf, - va_arg(ap, unsigned long)); + va_arg(*ap, unsigned long)); else d->len += sprintf(d->buf + d->len, dd.buf, - va_arg(ap, unsigned int)); + va_arg(*ap, unsigned int)); goto formatted; case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': @@ -215,10 +218,10 @@ int dstr_vputf(dstr *d, const char *p, va_list ap) DENSURE(d, sz); if (f & f_Long) d->len += sprintf(d->buf + d->len, dd.buf, - va_arg(ap, long double)); + va_arg(*ap, long double)); else d->len += sprintf(d->buf + d->len, dd.buf, - va_arg(ap, double)); + va_arg(*ap, double)); goto formatted; #else DPUTS(d, ""); @@ -231,11 +234,11 @@ int dstr_vputf(dstr *d, const char *p, va_list ap) sz = wd + 1; DENSURE(d, sz); d->len += sprintf(d->buf + d->len, dd.buf, - va_arg(ap, unsigned)); + va_arg(*ap, unsigned)); goto formatted; case 's': { - const char *s = va_arg(ap, const char *); + const char *s = va_arg(*ap, const char *); sz = strlen(s); DPUTC(&dd, *p); DPUTZ(&dd); @@ -257,16 +260,16 @@ int dstr_vputf(dstr *d, const char *p, va_list ap) sz = wd + 1; DENSURE(d, sz); d->len += sprintf(d->buf + d->len, dd.buf, - va_arg(ap, const void *)); + va_arg(*ap, const void *)); goto formatted; case 'n': if (f & f_long) - *va_arg(ap, long *) = (long)(d->len - n); + *va_arg(*ap, long *) = (long)(d->len - n); else if (f & f_short) - *va_arg(ap, short *) = (short)(d->len - n); + *va_arg(*ap, short *) = (short)(d->len - n); else - *va_arg(ap, int *) = (int)(d->len - n); + *va_arg(*ap, int *) = (int)(d->len - n); goto formatted; /* --- Other random stuff --- */ @@ -315,7 +318,7 @@ int dstr_putf(dstr *d, const char *p, ...) int n; va_list ap; va_start(ap, p); - n = dstr_vputf(d, p, ap); + n = dstr_vputf(d, p, &ap); va_end(ap); return (n); } diff --git a/dstr.h b/dstr.h index 538dd33..4272dd9 100644 --- a/dstr.h +++ b/dstr.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: dstr.h,v 1.11 2000/06/17 10:37:39 mdw Exp $ + * $Id: dstr.h,v 1.12 2002/01/13 13:30:48 mdw Exp $ * * Handle dynamically growing strings * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: dstr.h,v $ + * Revision 1.12 2002/01/13 13:30:48 mdw + * Change interface for @dstr_vputf@. + * * Revision 1.11 2000/06/17 10:37:39 mdw * Add support for arena management. * @@ -242,7 +245,7 @@ extern void dstr_puts(dstr */*d*/, const char */*s*/); * * Arguments: @dstr *d@ = pointer to a dynamic string block * @const char *p@ = pointer to @printf@-style format string - * @va_list ap@ = argument handle + * @va_list *ap@ = argument handle * * Returns: The number of characters written to the string. * @@ -250,7 +253,7 @@ extern void dstr_puts(dstr */*d*/, const char */*s*/); * supplied functions with @printf@-style interfaces. */ -extern int dstr_vputf(dstr */*d*/, const char */*p*/, va_list /*ap*/); +extern int dstr_vputf(dstr */*d*/, const char */*p*/, va_list */*ap*/); /* --- @dstr_putf@ --- * * diff --git a/man/dstr.3 b/man/dstr.3 index e019b24..b731715 100644 --- a/man/dstr.3 +++ b/man/dstr.3 @@ -63,7 +63,7 @@ dstr \- a simple dynamic string type .BI "void dstr_putc(dstr *" d ", char " ch ); .BI "void dstr_putz(dstr *" d ); .BI "void dstr_puts(dstr *" d ", const char *" s ); -.BI "int dstr_vputf(dstr *" d ", va_list " ap ); +.BI "int dstr_vputf(dstr *" d ", va_list *" ap ); .BI "int dstr_putf(dstr *" d ", ...);" .BI "void dstr_putd(dstr *" d ", const dstr *" p ); .BI "void dstr_putm(dstr *" d ", const void *" p ", size_t " sz ); @@ -340,12 +340,15 @@ The function .B dstr_vputf provides access to the `guts' of .BR dstr_putf : -given a format string and a -.B va_list -pointer, it will format the arguments according to the format string, -just as +given a format string and a pointer to a +.BR va_list +it will format the arguments according to the format string, just as .B dstr_putf -does. +does. (Note: that's a +.BR "va_list *" , +not a plain +.BR va_list , +so that it gets updated properly on exit.) .PP The function .B dstr_putd -- [mdw]