From 0a86b83a86acbc048345bf0ddf6d0196ddc5b042 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 10 Aug 2000 13:58:15 +0000 Subject: talloc returns 0xdeadbeef when asked to allocate 0 bytes jerry (This used to be commit df51dc32f6ffc4fe2cebfaae5079417aad1ff34d) --- source3/lib/talloc.c | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) (limited to 'source3') diff --git a/source3/lib/talloc.c b/source3/lib/talloc.c index 31594d2a01..577f761072 100644 --- a/source3/lib/talloc.c +++ b/source3/lib/talloc.c @@ -56,27 +56,37 @@ void *talloc(TALLOC_CTX *t, size_t size) { void *p; - size = (size + (TALLOC_ALIGN-1)) & ~(TALLOC_ALIGN-1); - - if (!t->list || (t->list->total_size - t->list->alloc_size) < size) { - struct talloc_chunk *c; - size_t asize = (size + (TALLOC_CHUNK_SIZE-1)) & ~(TALLOC_CHUNK_SIZE-1); - - c = (struct talloc_chunk *)malloc(sizeof(*c)); - if (!c) return NULL; - c->next = t->list; - c->ptr = (void *)malloc(asize); - if (!c->ptr) { - free(c); - return NULL; - } - c->alloc_size = 0; - c->total_size = asize; - t->list = c; + if (size == 0) + { + /* debugging value used to track down + memory problems */ + p = (void*)0xdeadbeef; } + else + { + size = (size + (TALLOC_ALIGN-1)) & ~(TALLOC_ALIGN-1); + + if (!t->list || (t->list->total_size - t->list->alloc_size) < size) { + struct talloc_chunk *c; + size_t asize = (size + (TALLOC_CHUNK_SIZE-1)) & ~(TALLOC_CHUNK_SIZE-1); + + c = (struct talloc_chunk *)malloc(sizeof(*c)); + if (!c) return NULL; + c->next = t->list; + c->ptr = (void *)malloc(asize); + if (!c->ptr) { + free(c); + return NULL; + } + c->alloc_size = 0; + c->total_size = asize; + t->list = c; + } - p = ((char *)t->list->ptr) + t->list->alloc_size; - t->list->alloc_size += size; + p = ((char *)t->list->ptr) + t->list->alloc_size; + t->list->alloc_size += size; + } + return p; } -- cgit