]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
a little realloc never hurt anyone.
authorMichael Jerris <mike@jerris.com>
Fri, 23 Mar 2007 22:44:28 +0000 (22:44 +0000)
committerMichael Jerris <mike@jerris.com>
Fri, 23 Mar 2007 22:44:28 +0000 (22:44 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4756 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_apr.c
src/switch_console.c

index 61c503190903afaab6ce6677ed87ef8e26f3d705..31e2172d7cf4abbd2eb0128e090cebccec300eb8 100644 (file)
@@ -657,8 +657,31 @@ SWITCH_DECLARE(int) switch_vasprintf(char **buf, const char *format, va_list ap)
 #ifdef HAVE_VASPRINTF
     return vasprintf(buf, format, ap);
 #else
-    *buf = (char *) malloc(2048);
-    return vsnprintf(*buf, 2048, format, ap);
+       size_t block_size = 1024;
+       int ret = -1;
+       int count = 1;
+       *buf = (char *) malloc(block_size);
+
+       if (*buf == NULL) {
+        return -1;
+    }
+       
+       while (ret == -1 && count < 10) {
+               ret = vsnprintf(*buf, block_size*count, format, ap);
+               if (ret == -1) {
+                       void *new_buf;
+                       count++;
+                       new_buf = realloc(*buf, block_size*count);
+                       if (new_buf == NULL) {
+                               *buf = NULL;
+                               return -1;
+                       } else {
+                               *buf = new_buf;
+                       }
+               }
+       }
+       return ret;
+
 #endif
 }
 
index cd61ce413bec07dba834ab1fe75522660c52a7ea..e3347cfe96a5ac937183b64c7572b7ea0c34bd7a 100644 (file)
@@ -41,7 +41,7 @@ SWITCH_DECLARE(switch_status_t) switch_console_stream_write(switch_stream_handle
        char *buf = handle->data;
        char *end = handle->end;
        int ret = 0;
-       char *data;
+       char *data = NULL;
 
        if (handle->data_len >= handle->data_size) {
                return SWITCH_STATUS_FALSE;