summaryrefslogtreecommitdiff
path: root/source4/lib/talloc.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-27 01:36:19 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:20 -0500
commit5b44130afad1bb1764d986de3ef0e8e04b0e7357 (patch)
treeafea820fdfd1021b5ee55b2fa37ba1b32d334e46 /source4/lib/talloc.c
parentf095a8e748a87de9f4cde117df13e8dccd8aeaa9 (diff)
downloadsamba-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.c17
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);
}