diff options
author | Jeremy Allison <jra@samba.org> | 2006-12-16 05:02:21 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:16:32 -0500 |
commit | a179d2f495e8dfb9ad30c2b7cec5349cb4e001af (patch) | |
tree | fbf493f2add1b0ca9f567d6bb80f6c8858ab1751 /source3 | |
parent | f0c7dc544bccda5eb87f56cbd5a49ca8d8372cb1 (diff) | |
download | samba-a179d2f495e8dfb9ad30c2b7cec5349cb4e001af.tar.gz samba-a179d2f495e8dfb9ad30c2b7cec5349cb4e001af.tar.bz2 samba-a179d2f495e8dfb9ad30c2b7cec5349cb4e001af.zip |
r20208: Change sprintf_append() never to use malloc,
but always use a talloc context.
Thanks to simo for pointing this out.
Jeremy.
(This used to be commit 437cb7c88833d7eab0e3c3dcf175860df74a7a38)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/tallocmsg.c | 14 | ||||
-rw-r--r-- | source3/lib/util_str.c | 18 |
2 files changed, 13 insertions, 19 deletions
diff --git a/source3/lib/tallocmsg.c b/source3/lib/tallocmsg.c index 599d60737d..e4e9bac94d 100644 --- a/source3/lib/tallocmsg.c +++ b/source3/lib/tallocmsg.c @@ -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); } /** diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c index cd52faa52d..ccf0af8b62 100644 --- a/source3/lib/util_str.c +++ b/source3/lib/util_str.c @@ -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; } |