summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/vfprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/lib/vfprintf.c')
-rw-r--r--mdk-stage1/dietlibc/lib/vfprintf.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/mdk-stage1/dietlibc/lib/vfprintf.c b/mdk-stage1/dietlibc/lib/vfprintf.c
index 03dfe87a9..c33a2404b 100644
--- a/mdk-stage1/dietlibc/lib/vfprintf.c
+++ b/mdk-stage1/dietlibc/lib/vfprintf.c
@@ -1,11 +1,19 @@
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
+#include "dietstdarg.h"
int vfprintf(FILE *fstream, const char *format, va_list ap)
{
- char tmp[1000000];
- size_t n = vsnprintf(tmp, sizeof(tmp), format, ap);
- fwrite(tmp, n, 1, fstream);
+ char *tmp;
+ va_list cp_ap;
+ size_t n = 0;
+
+ va_copy(cp_ap, ap);
+ n=vsnprintf(0, 1000000, format, cp_ap);
+ tmp=alloca(n+2);
+ vsnprintf(tmp, n+1, format, ap);
+ fwrite(tmp, n,1, fstream);
return n;
}
+