diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-06-20 05:03:54 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:18:35 -0500 |
commit | 545203d9154a9ce0f5cc3800796581f62380074b (patch) | |
tree | 1b086d811be998cd6df593b08ee2bfdbad5940e1 /source4/lib/talloc/talloc.c | |
parent | db6933323c0997cc6334d447e9a938cb42731ae9 (diff) | |
download | samba-545203d9154a9ce0f5cc3800796581f62380074b.tar.gz samba-545203d9154a9ce0f5cc3800796581f62380074b.tar.bz2 samba-545203d9154a9ce0f5cc3800796581f62380074b.zip |
r7778: added talloc_find_parent_bytype() and talloc_find_parent_byname()
These provide a way to find a parent of a ptr that is of a given
type. I will be using this to find the event context in smbd, relying
on the fact that everything is a child of the top level event
context. I did look at the alternatives, and found that passing the
event context to just about every call in smbd was getting way too
complex (we need to get it to anything that can do a ldb operation, as
that can invoke ldap).
So this method avoids a global, and seems to work nicely
(This used to be commit bdb55c7a10a516b75652065e14f5acd09d24ab35)
Diffstat (limited to 'source4/lib/talloc/talloc.c')
-rw-r--r-- | source4/lib/talloc/talloc.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c index 6b6eb87f21..c6f748ea3b 100644 --- a/source4/lib/talloc/talloc.c +++ b/source4/lib/talloc/talloc.c @@ -1108,3 +1108,27 @@ size_t talloc_get_size(const void *context) return tc->size; } + +/* + find a parent of this context that has the given name, if any +*/ +void *talloc_find_parent_byname(const void *context, const char *name) +{ + struct talloc_chunk *tc; + + if (context == NULL) { + return NULL; + } + + tc = talloc_chunk_from_ptr(context); + while (tc->prev) { + tc = tc->prev; + } + while (tc->parent && (!tc->name || strcmp(tc->name, name))) { + tc = tc->parent; + } + if (tc == NULL) { + return NULL; + } + return (void *)(tc+1); +} |