summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/til_setup.c19
-rw-r--r--src/til_setup.h1
2 files changed, 20 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;
+}
diff --git a/src/til_setup.h b/src/til_setup.h
index 7f61213..16380d5 100644
--- a/src/til_setup.h
+++ b/src/til_setup.h
@@ -8,5 +8,6 @@ struct til_setup_t {
};
void * til_setup_new(size_t size, void (*free_func)(til_setup_t *setup));
+void * til_setup_free(til_setup_t *setup);
#endif
© All Rights Reserved