Pavel Chromy: faster alloc_printf()

git-svn-id: svn://svn.berlios.de/openocd/trunk@454 b42882b7-edfa-0310-969c-e2dbd0fdcd60
__archive__
oharboe 2008-03-06 12:38:11 +00:00
parent 652a5b18b4
commit 2070559d95
1 changed files with 13 additions and 14 deletions

View File

@ -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 */