X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fobstack%2Fobstack_printf.c;h=eb5b86e45126ca251ce80756608e749357637651;hb=5a5b0a8806277f92f5950cfedd8a231f4d00a306;hp=ab494bb99ab2e9fbf2b7d01e8d7b0e3d65c9f3ee;hpb=53c740e61018fc1172d2c290a486251efd4e906b;p=libfirm diff --git a/ir/obstack/obstack_printf.c b/ir/obstack/obstack_printf.c index ab494bb99..eb5b86e45 100644 --- a/ir/obstack/obstack_printf.c +++ b/ir/obstack/obstack_printf.c @@ -1,24 +1,24 @@ #include #include #include +#include #include "obstack.h" #ifdef _WIN32 #define vsnprintf _vsnprintf #endif -int obstack_printf(struct obstack *obst, const char *fmt, ...) +int obstack_vprintf(struct obstack *obst, const char *fmt, va_list ap) { char buf[128]; char *buffer = buf; - size_t size = lengthof(buf); - va_list ap; + size_t size = sizeof(buf); int len; for (;;) { - va_start(ap, fmt); - len = vsnprintf(buffer, sizeof(buffer), fmt, ap); - va_end(ap); + va_list tap; + va_copy(tap, ap); + len = vsnprintf(buffer, size, fmt, tap); /* snprintf should return -1 only in the error case, but older glibcs * and probably other systems are buggy in this respect and return -1 if @@ -37,7 +37,7 @@ int obstack_printf(struct obstack *obst, const char *fmt, ...) } else { break; } - buffer = malloc(buffer, size); + buffer = malloc(size); } obstack_grow(obst, buffer, len); @@ -46,3 +46,15 @@ int obstack_printf(struct obstack *obst, const char *fmt, ...) return len; } + +int obstack_printf(struct obstack *obst, const char *fmt, ...) +{ + va_list ap; + int res; + + va_start(ap, fmt); + res = obstack_vprintf(obst, fmt, ap); + va_end(ap); + + return res; +}