diff --git a/src/include/ngspice/stringutil.h b/src/include/ngspice/stringutil.h index bb372b6bd..ea3c1557f 100644 --- a/src/include/ngspice/stringutil.h +++ b/src/include/ngspice/stringutil.h @@ -3,11 +3,14 @@ * 1999 E. Rouat ************/ +#ifndef ngspice_STRINGUTIL_H +#define ngspice_STRINGUTIL_H + #include "ngspice/config.h" #include "ngspice/bool.h" -#ifndef ngspice_STRINGUTIL_H -#define ngspice_STRINGUTIL_H +#include + int prefix(register char *p, register char *s); char * copy(const char *str); @@ -24,6 +27,8 @@ char * gettok(char **s); char * gettok_instance(char **); char * gettok_char(char **s, char p, bool inc_p, bool nested); +extern char *tvprintf(const char *fmt, va_list args); + #ifdef __GNUC__ extern char *tprintf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); #else diff --git a/src/misc/string.c b/src/misc/string.c index 237f99bec..6035c8d95 100644 --- a/src/misc/string.c +++ b/src/misc/string.c @@ -53,24 +53,21 @@ copy_substring(const char *str, const char *end) } -char* -tprintf(const char *fmt, ...) +char * +tvprintf(const char *fmt, va_list args) { char buf[1024]; char *p = buf; int size = sizeof(buf); - va_list args; - for (;;) { int nchars; + va_list ap; - va_start(args, fmt); - - nchars = vsnprintf(p, (size_t) size, fmt, args); - - va_end(args); + va_copy(ap, args); + nchars = vsnprintf(p, (size_t) size, fmt, ap); + va_end(ap); if (nchars == -1) { // compatibility to old implementations size *= 2; @@ -91,6 +88,20 @@ tprintf(const char *fmt, ...) } +char * +tprintf(const char *fmt, ...) +{ + char *rv; + va_list ap; + + va_start(ap, fmt); + rv = tvprintf(fmt, ap); + va_end(ap); + + return rv; +} + + /* Determine whether sub is a substring of str. */ /* Like strstr( ) XXX */