diff options
-rw-r--r-- | source4/lib/talloc/talloc.c | 33 | ||||
-rw-r--r-- | source4/lib/talloc/talloc.h | 1 |
2 files changed, 27 insertions, 7 deletions
diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c index 9dd7ef36c7..08d4cb93a6 100644 --- a/source4/lib/talloc/talloc.c +++ b/source4/lib/talloc/talloc.c @@ -1121,14 +1121,33 @@ void *talloc_find_parent_byname(const void *context, const char *name) } tc = talloc_chunk_from_ptr(context); - while (tc->prev) { - tc = tc->prev; - } - while (tc->parent && (!tc->name || strcmp(tc->name, name))) { + while (tc) { + if (tc->name && strcmp(tc->name, name) == 0) { + return (void*)(tc+1); + } + while (tc && tc->prev) tc = tc->prev; tc = tc->parent; } - if (tc == NULL || tc->name == NULL || strcmp(tc->name, name)) { - return NULL; + return NULL; +} + +/* + show the parentage of a context +*/ +void talloc_show_parents(const void *context, FILE *file) +{ + struct talloc_chunk *tc; + + if (context == NULL) { + fprintf(file, "talloc no parents for NULL\n"); + return; + } + + tc = talloc_chunk_from_ptr(context); + fprintf(file, "talloc parents of '%s'\n", talloc_get_name(context)); + while (tc) { + fprintf(file, "\t'%s'\n", talloc_get_name(tc+1)); + while (tc && tc->prev) tc = tc->prev; + tc = tc->parent; } - return (void *)(tc+1); } diff --git a/source4/lib/talloc/talloc.h b/source4/lib/talloc/talloc.h index 5160a3874a..04d5cbb9af 100644 --- a/source4/lib/talloc/talloc.h +++ b/source4/lib/talloc/talloc.h @@ -130,6 +130,7 @@ void *talloc_realloc_fn(const void *context, void *ptr, size_t size); void *talloc_autofree_context(void); size_t talloc_get_size(const void *ctx); void *talloc_find_parent_byname(const void *ctx, const char *name); +void talloc_show_parents(const void *context, FILE *file); #endif |