aboutsummaryrefslogtreecommitdiff
path: root/src/librc
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2022-03-31 07:25:35 +0100
committerWilliam Hubbs <w.d.hubbs@gmail.com>2022-05-08 14:56:26 -0500
commit17de4e5dfdf614332091b856bc05837b2e204a5a (patch)
tree0ac908a666db0685b1890972166cbb326bc41e0e /src/librc
parent1afcc37803dc9bde0cc8f336fe1f42e2f971ef14 (diff)
librc: mark stringlist functions as mallocs
This gives a hint to the compiler that allocations (return values) from this function should be paired with a corresponding dealloc/free function In this case, it means that every rc_stringlist that rc_stringlist_new() returns should eventually be freed by calling rc_stringlist_free(ptr) where ptr is the relevant rc_stringlist. We have to add a test for this into the build system because only GCC supports this for now. In future, we might be able to use meson's has_function_attribute (it does support 'malloc', just not AFAICT 'malloc with arguments'). Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'src/librc')
-rw-r--r--src/librc/rc.h.in13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/librc/rc.h.in b/src/librc/rc.h.in
index 651f317b..c5146fb6 100644
--- a/src/librc/rc.h.in
+++ b/src/librc/rc.h.in
@@ -528,8 +528,15 @@ bool rc_yesno(const char *);
/*! @name String List functions
* Every string list should be released with a call to rc_stringlist_free. */
-/*! Create a new stringlist
+/*! Frees each item on the list and the list itself.
+ * @param list to free */
+void rc_stringlist_free(RC_STRINGLIST *);
+
+/*! Create a new stringlinst
* @return pointer to new list */
+#ifdef HAVE_MALLOC_EXTENDED_ATTRIBUTE
+__attribute__ ((malloc (rc_stringlist_free, 1)))
+#endif
RC_STRINGLIST *rc_stringlist_new(void);
/*! Duplicate the item, add it to end of the list and return a pointer to it.
@@ -568,10 +575,6 @@ RC_STRINGLIST *rc_stringlist_split(const char *, const char *);
* @param list to sort */
void rc_stringlist_sort(RC_STRINGLIST **);
-/*! Frees each item on the list and the list itself.
- * @param list to free */
-void rc_stringlist_free(RC_STRINGLIST *);
-
typedef struct rc_pid
{
pid_t pid;