]> git.sur5r.net Git - openocd/commitdiff
Pavel Chromy: faster alloc_printf()
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 6 Mar 2008 12:38:11 +0000 (12:38 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 6 Mar 2008 12:38:11 +0000 (12:38 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@454 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/helper/log.c

index 5127a3731ab28fd06f0bb6193a1ad286c98ad5e7..3d4f0389de7a36f608c637e91e7f7d197b0cdbde 100644 (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 */