diff options
author | Sam James <sam@gentoo.org> | 2022-03-31 07:25:35 +0100 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2022-05-08 14:56:26 -0500 |
commit | 17de4e5dfdf614332091b856bc05837b2e204a5a (patch) | |
tree | 0ac908a666db0685b1890972166cbb326bc41e0e /src | |
parent | 1afcc37803dc9bde0cc8f336fe1f42e2f971ef14 (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')
-rw-r--r-- | src/librc/rc.h.in | 13 |
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; |