Pavel Chromy: faster alloc_printf()
git-svn-id: svn://svn.berlios.de/openocd/trunk@454 b42882b7-edfa-0310-969c-e2dbd0fdcd60__archive__
parent
652a5b18b4
commit
2070559d95
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue