From 247e1667b00354d0407b8f3de2dc11ba751b1918 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 15 Dec 2006 22:58:06 +0000 Subject: r20197: merge talloc fixes from samba4: - make most static functions inline - handle NULL pointers in talloc_parent_chunk() - use talloc_parent_chunk() in talloc_parent_name() to fix a bug found by the IBM checker metze (This used to be commit c718eb7a7c3cdc4acb25f303a73a3ca478c27af0) --- source3/lib/talloc/talloc.c | 36 +++++++++++++++++------------------- source3/lib/talloc/talloc.h | 2 +- 2 files changed, 18 insertions(+), 20 deletions(-) (limited to 'source3/lib/talloc') diff --git a/source3/lib/talloc/talloc.c b/source3/lib/talloc/talloc.c index 91e02d7e1e..15a44bd0d9 100644 --- a/source3/lib/talloc/talloc.c +++ b/source3/lib/talloc/talloc.c @@ -162,10 +162,17 @@ do { \ /* return the parent chunk of a pointer */ -static struct talloc_chunk *talloc_parent_chunk(const void *ptr) +static inline struct talloc_chunk *talloc_parent_chunk(const void *ptr) { - struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); + struct talloc_chunk *tc; + + if (unlikely(ptr == NULL)) { + return NULL; + } + + tc = talloc_chunk_from_ptr(ptr); while (tc->prev) tc=tc->prev; + return tc->parent; } @@ -178,23 +185,12 @@ void *talloc_parent(const void *ptr) /* find parents name */ -const char *talloc_parent_name(const void *context) +const char *talloc_parent_name(const void *ptr) { - struct talloc_chunk *tc; - - if (unlikely(context == NULL)) { - return NULL; - } - - tc = talloc_chunk_from_ptr(context); - while (tc && tc->prev) tc = tc->prev; - if (tc) { - tc = tc->parent; - } - return tc->name; + struct talloc_chunk *tc = talloc_parent_chunk(ptr); + return tc? tc->name : NULL; } - /* Allocate a bit of memory as a child of an existing pointer */ @@ -265,6 +261,8 @@ int talloc_increase_ref_count(const void *ptr) /* helper for talloc_reference() + + this is referenced by a function pointer and should not be inline */ static int talloc_reference_destructor(struct talloc_reference_handle *handle) { @@ -481,7 +479,7 @@ void *_talloc_steal(const void *new_ctx, const void *ptr) talloc_reference() has done. The context and pointer arguments must match those given to a talloc_reference() */ -static int talloc_unreference(const void *context, const void *ptr) +static inline int talloc_unreference(const void *context, const void *ptr) { struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); struct talloc_reference_handle *h; @@ -561,9 +559,9 @@ int talloc_unlink(const void *context, void *ptr) /* add a name to an existing pointer - va_list version */ -static const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); +static inline const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); -static const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) +static inline const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) { struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); tc->name = talloc_vasprintf(ptr, fmt, ap); diff --git a/source3/lib/talloc/talloc.h b/source3/lib/talloc/talloc.h index 27d7d2c423..75c130a275 100644 --- a/source3/lib/talloc/talloc.h +++ b/source3/lib/talloc/talloc.h @@ -123,7 +123,7 @@ void *talloc_named_const(const void *context, size_t size, const char *name); const char *talloc_get_name(const void *ptr); void *talloc_check_name(const void *ptr, const char *name); void *talloc_parent(const void *ptr); -const char *talloc_parent_name(const void *context); +const char *talloc_parent_name(const void *ptr); void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2); int talloc_free(void *ptr); void talloc_free_children(void *ptr); -- cgit