aboutsummaryrefslogtreecommitdiff
path: root/src/helper
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-03-06 12:38:11 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-03-06 12:38:11 +0000
commit2070559d95255acbc5aec92a503c576cefffdd82 (patch)
treea9acadbb574af27eba796d4645751616bb656bd6 /src/helper
parent652a5b18b4d769035b6d6c3357de4b9d858cbbe6 (diff)
downloadriscv-openocd-2070559d95255acbc5aec92a503c576cefffdd82.zip
riscv-openocd-2070559d95255acbc5aec92a503c576cefffdd82.tar.gz
riscv-openocd-2070559d95255acbc5aec92a503c576cefffdd82.tar.bz2
Pavel Chromy: faster alloc_printf()
git-svn-id: svn://svn.berlios.de/openocd/trunk@454 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/helper')
-rw-r--r--src/helper/log.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/helper/log.c b/src/helper/log.c
index 5127a37..3d4f038 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 */