diff options
Diffstat (limited to 'src/til_setup.c')
-rw-r--r-- | src/til_setup.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/til_setup.c b/src/til_setup.c index c5fd451..aab196b 100644 --- a/src/til_setup.c +++ b/src/til_setup.c @@ -8,6 +8,10 @@ /* Allocate and initialize a new til_setup_t of size bytes. * free_func is assigned to til_setup_t.free, and will be used for freeing the * instance returned when destroyed. + * + * Note this returns void * despite creating a til_setup_t, this is for convenience + * as the callers are generally using it in place of calloc(), and assign it to a + * container struct of some other type but having an embedded til_setup_t. */ void * til_setup_new(size_t size, void (*free_func)(til_setup_t *setup)) { @@ -24,3 +28,18 @@ void * til_setup_new(size_t size, void (*free_func)(til_setup_t *setup)) return setup; } + + +/* Free the setup when non-NULL, using setup->free if non-NULL. + * Always returns NULL for uses like foo = til_setup_free(foo); + */ +void * til_setup_free(til_setup_t *setup) +{ + if (!setup) + return NULL; + + if (setup->free) + setup->free(setup); + + return NULL; +} |