From 027ae815ec3a726a5138c04fb6e4296c5f6aee39 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 26 Apr 2020 23:38:54 +0200 Subject: ta: add ta_get_parent() Sometimes useful for debugging. Also fix a random typo elsewhere. --- ta/ta.c | 12 +++++++++++- ta/ta.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ta/ta.c b/ta/ta.c index a0eabbd3e9..b695317301 100644 --- a/ta/ta.c +++ b/ta/ta.c @@ -97,7 +97,7 @@ void ta_set_parent(void *ptr, void *ta_parent) ch->prev->next = ch->next; if (ch->next) ch->next->prev = ch->prev; - // If ch was the firs child, change child link of old parent + // If ch was the first child, change child link of old parent if (ch->parent) { assert(ch->parent->child == ch); ch->parent->child = ch->next; @@ -119,6 +119,16 @@ void ta_set_parent(void *ptr, void *ta_parent) } } +/* Return the parent allocation, or NULL if none or if ptr==NULL. + * + * Warning: do not use this for program logic, or I'll be sad. + */ +void *ta_get_parent(void *ptr) +{ + struct ta_header *ch = get_header(ptr); + return ch ? ch->parent : NULL; +} + /* Allocate size bytes of memory. If ta_parent is not NULL, this is used as * parent allocation (if ta_parent is freed, this allocation is automatically * freed as well). size==0 allocates a block of size 0 (i.e. returns non-NULL). diff --git a/ta/ta.h b/ta/ta.h index 2af4747533..4baac8fb40 100644 --- a/ta/ta.h +++ b/ta/ta.h @@ -52,6 +52,7 @@ void ta_free(void *ptr); void ta_free_children(void *ptr); void ta_set_destructor(void *ptr, void (*destructor)(void *)); void ta_set_parent(void *ptr, void *ta_parent); +void *ta_get_parent(void *ptr); // Utility functions size_t ta_calc_array_size(size_t element_size, size_t count); -- cgit v1.2.3