chiark / gitweb /
Change interface for @dstr_vputf@.
authormdw <mdw>
Sun, 13 Jan 2002 13:30:50 +0000 (13:30 +0000)
committermdw <mdw>
Sun, 13 Jan 2002 13:30:50 +0000 (13:30 +0000)
dputf.c
dstr.h
man/dstr.3

diff --git a/dputf.c b/dputf.c
index bb0641ca45182c23b9992858abfc4370e70b59fa..ba23d9869dc73bc7abfb71dfeb20bd71029548ae 100644 (file)
--- 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 @<float.h>@ 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, "<no float support>");
@@ -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 538dd33a0f8653d48d85b9b7d9d278317551212d..4272dd90d8c74964bdbe8ee30f0dee197260a676 100644 (file)
--- 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@ --- *
  *
index e019b24c55633a4e4842d38da47dd8a5367cb111..b7317157bf145652c7eef9eb14a30dc0fa1a7bfd 100644 (file)
@@ -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