From: oharboe Date: Thu, 6 Mar 2008 12:38:11 +0000 (+0000) Subject: Pavel Chromy: faster alloc_printf() X-Git-Tag: v0.1.0~835 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2070559d95255acbc5aec92a503c576cefffdd82;p=openocd Pavel Chromy: faster alloc_printf() git-svn-id: svn://svn.berlios.de/openocd/trunk@454 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- diff --git a/src/helper/log.c b/src/helper/log.c index 5127a373..3d4f0389 100644 --- a/src/helper/log.c +++ b/src/helper/log.c @@ -269,24 +269,22 @@ char *alloc_printf(const char *fmt, va_list ap) /* no buffer at the beginning, force realloc to do the job */ char *string = NULL; - /* start with minimal length to exercise all the code paths */ - int size = 1; + /* start with buffer size suitable for typical messages */ + int size = 128; for (;;) { - size *= 2; /* double the buffer size */ - - char *t = string; - string = realloc(string, size); - if (string == NULL) - { - if (t != NULL) - free(t); - return NULL; - } + char *t = string; + string = realloc(string, size); + if (string == NULL) + { + if (t != NULL) + free(t); + return NULL; + } - va_list ap_copy; - va_copy(ap_copy, ap); + va_list ap_copy; + va_copy(ap_copy, ap); int ret; ret = vsnprintf(string, size, fmt, ap_copy); @@ -295,6 +293,7 @@ char *alloc_printf(const char *fmt, va_list ap) break; /* there was just enough or not enough space, allocate more in the next round */ + size *= 2; /* double the buffer size */ } /* the returned buffer is by principle guaranteed to be at least one character longer */