diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-03-06 12:38:11 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-03-06 12:38:11 +0000 |
commit | 2070559d95255acbc5aec92a503c576cefffdd82 (patch) | |
tree | a9acadbb574af27eba796d4645751616bb656bd6 /src/helper | |
parent | 652a5b18b4d769035b6d6c3357de4b9d858cbbe6 (diff) | |
download | riscv-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.c | 27 |
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 */ |