X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fobstack%2Fobstack_printf.c;h=a270fea800623ff41b1866675aab28eb135fca10;hb=292b89d3367cdeae0cb2a1fca37b6b84e781eab8;hp=eb5b86e45126ca251ce80756608e749357637651;hpb=d932e36cb60d0edbe287931fa1c03807de438a82;p=libfirm diff --git a/ir/obstack/obstack_printf.c b/ir/obstack/obstack_printf.c index eb5b86e45..a270fea80 100644 --- a/ir/obstack/obstack_printf.c +++ b/ir/obstack/obstack_printf.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -5,10 +6,16 @@ #include "obstack.h" #ifdef _WIN32 -#define vsnprintf _vsnprintf -#endif - -int obstack_vprintf(struct obstack *obst, const char *fmt, va_list ap) +/* win32/C89 has no va_copy function... so we have to use the stupid fixed-length version */ +int obstack_vprintf(struct obstack *obst, const char *fmt, va_list ap) FIRM_NOTHROW +{ + char buf[16384]; + int len = _vsnprintf(buf, sizeof(buf), fmt, ap); + obstack_grow(obst, buf, len); + return len; +} +#else +int obstack_vprintf(struct obstack *obst, const char *fmt, va_list ap) FIRM_NOTHROW { char buf[128]; char *buffer = buf; @@ -37,7 +44,7 @@ int obstack_vprintf(struct obstack *obst, const char *fmt, va_list ap) } else { break; } - buffer = malloc(size); + buffer = (char*)malloc(size); } obstack_grow(obst, buffer, len); @@ -46,8 +53,9 @@ int obstack_vprintf(struct obstack *obst, const char *fmt, va_list ap) return len; } +#endif -int obstack_printf(struct obstack *obst, const char *fmt, ...) +int obstack_printf(struct obstack *obst, const char *fmt, ...) FIRM_NOTHROW { va_list ap; int res;