summaryrefslogtreecommitdiff
path: root/lib/talloc/talloc.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2009-03-03 18:01:01 +0100
committerStefan Metzmacher <metze@samba.org>2009-03-03 18:07:33 +0100
commitb6f479d4413511fbd742e7c8464cec67501f539c (patch)
treec52c6fcbd6724a1600ea6a30cea3f535b4cf2f62 /lib/talloc/talloc.c
parent4b2955aa7dbcf06629d24d3ea35c6dfa8c4156b9 (diff)
downloadsamba-b6f479d4413511fbd742e7c8464cec67501f539c.tar.gz
samba-b6f479d4413511fbd742e7c8464cec67501f539c.tar.bz2
samba-b6f479d4413511fbd742e7c8464cec67501f539c.zip
talloc: add talloc_get_type_abort()
metze
Diffstat (limited to 'lib/talloc/talloc.c')
-rw-r--r--lib/talloc/talloc.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c
index 1f7e52439f..c472e9fda9 100644
--- a/lib/talloc/talloc.c
+++ b/lib/talloc/talloc.c
@@ -806,6 +806,30 @@ void *talloc_check_name(const void *ptr, const char *name)
return NULL;
}
+static void talloc_abort_type_missmatch(const char *location,
+ const char *name,
+ const char *expected)
+{
+ TALLOC_ABORT("Type missmatch");
+}
+
+void *_talloc_get_type_abort(const void *ptr, const char *name, const char *location)
+{
+ const char *pname;
+
+ if (unlikely(ptr == NULL)) {
+ talloc_abort_type_missmatch(location, NULL, name);
+ return NULL;
+ }
+
+ pname = talloc_get_name(ptr);
+ if (likely(pname == name || strcmp(pname, name) == 0)) {
+ return discard_const_p(void, ptr);
+ }
+
+ talloc_abort_type_missmatch(location, pname, name);
+ return NULL;
+}
/*
this is for compatibility with older versions of talloc