aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build10
-rw-r--r--src/librc/rc.h.in13
2 files changed, 18 insertions, 5 deletions
diff --git a/meson.build b/meson.build
index 11d146a5..e770eab0 100644
--- a/meson.build
+++ b/meson.build
@@ -182,6 +182,16 @@ cc_warning_flags = cc.get_supported_arguments(cc_warning_flags_test)
cc_flags = [cc_debug_flags, cc_os_flags, cc_warning_flags]
add_project_arguments(cc_flags, language : 'c')
+# Meson's has_function_attribute doesn't know about GCC's extended
+# version (with arguments), so we have to build a test program instead.
+malloc_attribute_test = '''#include<stdlib.h>
+__attribute__ ((malloc (free, 1)))
+int func() { return 0; }
+'''
+if cc.compiles(malloc_attribute_test, name : 'malloc attribute with arguments')
+ add_project_arguments('-DHAVE_MALLOC_EXTENDED_ATTRIBUTE', language: 'c')
+endif
+
incdir = include_directories('src/shared')
einfo_incdir = include_directories('src/libeinfo')
rc_incdir = include_directories('src/librc')
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;