r20208: Change sprintf_append() never to use malloc,
authorJeremy Allison <jra@samba.org>
Sat, 16 Dec 2006 05:02:21 +0000 (05:02 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:16:32 +0000 (12:16 -0500)
but always use a talloc context.
Thanks to simo for pointing this out.
Jeremy.
(This used to be commit 437cb7c88833d7eab0e3c3dcf175860df74a7a38)

source3/lib/tallocmsg.c
source3/lib/util_str.c

index 599d60737def5f18bd910c43ebd997da94e69a5a..e4e9bac94d672727b3dc960daef41159260a6f49 100644 (file)
@@ -26,6 +26,7 @@
  **/
 
 struct msg_pool_usage_state {
+       TALLOC_CTX *mem_ctx;
        ssize_t len;
        size_t buflen;
        char *s;
@@ -37,13 +38,13 @@ static void msg_pool_usage_helper(const void *ptr, int depth, int max_depth, int
        struct msg_pool_usage_state *state = (struct msg_pool_usage_state *)_s;
 
        if (is_ref) {
-               sprintf_append(NULL, &state->s, &state->len, &state->buflen,
+               sprintf_append(state->mem_ctx, &state->s, &state->len, &state->buflen,
                               "%*sreference to: %s\n", depth*4, "", name);
                return;
        }
 
        if (depth == 0) {
-               sprintf_append(NULL, &state->s, &state->len, &state->buflen,
+               sprintf_append(state->mem_ctx, &state->s, &state->len, &state->buflen,
                               "%stalloc report on '%s' (total %6lu bytes in %3lu blocks)\n", 
                               (max_depth < 0 ? "full " :""), name,
                               (unsigned long)talloc_total_size(ptr),
@@ -51,7 +52,7 @@ static void msg_pool_usage_helper(const void *ptr, int depth, int max_depth, int
                return;
        }
 
-       sprintf_append(NULL, &state->s, &state->len, &state->buflen,
+       sprintf_append(state->mem_ctx, &state->s, &state->len, &state->buflen,
                       "%*s%-30s contains %6lu bytes in %3lu blocks (ref %d)\n", 
                       depth*4, "",
                       name,
@@ -73,6 +74,10 @@ void msg_pool_usage(int msg_type, struct process_id src_pid,
        
        DEBUG(2,("Got POOL_USAGE\n"));
 
+       state.mem_ctx = talloc_init("msg_pool_usage");
+       if (!state.mem_ctx) {
+               return;
+       }
        state.len       = 0;
        state.buflen    = 512;
        state.s         = NULL;
@@ -80,13 +85,14 @@ void msg_pool_usage(int msg_type, struct process_id src_pid,
        talloc_report_depth_cb(NULL, 0, -1, msg_pool_usage_helper, &state);
 
        if (!state.s) {
+               talloc_destroy(state.mem_ctx);
                return;
        }
        
        message_send_pid(src_pid, MSG_POOL_USAGE,
                         state.s, strlen(state.s)+1, True);
 
-       SAFE_FREE(state.s);
+       talloc_destroy(state.mem_ctx);
 }
 
 /**
index cd52faa52d9302b72b375ea2c413fe95404388a5..ccf0af8b6239226276c631650dcaad69526c3156 100644 (file)
@@ -2458,11 +2458,7 @@ void sprintf_append(TALLOC_CTX *mem_ctx, char **string, ssize_t *len,
                if (*bufsize == 0)
                        *bufsize = 128;
 
-               if (mem_ctx != NULL)
-                       *string = TALLOC_ARRAY(mem_ctx, char, *bufsize);
-               else
-                       *string = SMB_MALLOC_ARRAY(char, *bufsize);
-
+               *string = TALLOC_ARRAY(mem_ctx, char, *bufsize);
                if (*string == NULL)
                        goto error;
        }
@@ -2484,13 +2480,8 @@ void sprintf_append(TALLOC_CTX *mem_ctx, char **string, ssize_t *len,
        }
 
        if (increased) {
-               if (mem_ctx != NULL) {
-                       *string = TALLOC_REALLOC_ARRAY(mem_ctx, *string, char,
-                                                      *bufsize);
-               } else {
-                       *string = SMB_REALLOC_ARRAY(*string, char, *bufsize);
-               }
-
+               *string = TALLOC_REALLOC_ARRAY(mem_ctx, *string, char,
+                                              *bufsize);
                if (*string == NULL) {
                        goto error;
                }
@@ -2503,9 +2494,6 @@ void sprintf_append(TALLOC_CTX *mem_ctx, char **string, ssize_t *len,
 
  error:
        *len = -1;
-       if (mem_ctx == NULL) {
-               SAFE_FREE(*string);
-       }
        *string = NULL;
 }