diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-27 01:36:19 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:20 -0500 |
commit | 5b44130afad1bb1764d986de3ef0e8e04b0e7357 (patch) | |
tree | afea820fdfd1021b5ee55b2fa37ba1b32d334e46 /source4/lib/talloc.c | |
parent | f095a8e748a87de9f4cde117df13e8dccd8aeaa9 (diff) | |
download | samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.tar.gz samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.tar.bz2 samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.zip |
r2671: we're getting too many errors caused by the talloc_realloc() API not
taking a context (so when you pass a NULL pointer you end up with
memory in a top level context). Fixed it by changing the API to take a
context. The context is only used if the pointer you are reallocing is
NULL.
(This used to be commit 8dc23821c9f54b2f13049b5e608a0cafb81aa540)
Diffstat (limited to 'source4/lib/talloc.c')
-rw-r--r-- | source4/lib/talloc.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/source4/lib/talloc.c b/source4/lib/talloc.c index 8193f9c384..7266ff8a45 100644 --- a/source4/lib/talloc.c +++ b/source4/lib/talloc.c @@ -287,9 +287,10 @@ int talloc_free(void *ptr) /* - A talloc version of realloc + A talloc version of realloc. The context argument is only used if + ptr is NULL */ -void *_talloc_realloc(void *ptr, size_t size, const char *name) +void *_talloc_realloc(void *context, void *ptr, size_t size, const char *name) { struct talloc_chunk *tc; void *new_ptr; @@ -302,7 +303,7 @@ void *_talloc_realloc(void *ptr, size_t size, const char *name) /* realloc(NULL) is equavalent to malloc() */ if (ptr == NULL) { - return talloc_named_const(NULL, size, name); + return talloc_named_const(context, size, name); } tc = talloc_chunk_from_ptr(ptr); @@ -550,7 +551,7 @@ static char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); static char *talloc_vasprintf_append(char *s, - const char *fmt, va_list ap) + const char *fmt, va_list ap) { int len, s_len; va_list ap2; @@ -564,7 +565,7 @@ static char *talloc_vasprintf_append(char *s, } len = vsnprintf(NULL, 0, fmt, ap2); - s = talloc_realloc(s, s_len + len+1); + s = talloc_realloc(NULL, s, s_len + len+1); if (!s) return NULL; VA_COPY(ap2, ap); @@ -607,13 +608,13 @@ void *talloc_array(void *ctx, size_t el_size, uint_t count, const char *name) /* realloc an array, checking for integer overflow in the array size */ -void *talloc_realloc_array(void *ptr, size_t el_size, uint_t count, const char *name) +void *talloc_realloc_array(void *ctx, void *ptr, size_t el_size, uint_t count, const char *name) { if (count == 0 || count >= MAX_TALLOC_SIZE/el_size) { return NULL; } - ptr = talloc_realloc(ptr, el_size * count); + ptr = talloc_realloc(ctx, ptr, el_size * count); if (ptr) { talloc_set_name_const(ptr, name); } @@ -632,5 +633,5 @@ void *talloc_ldb_alloc(void *context, void *ptr, size_t size) talloc_free(ptr); return NULL; } - return talloc_realloc(ptr, size); + return talloc_realloc(context, ptr, size); } |