diff --git a/doc/libcfu.texi b/doc/libcfu.texi index 3dc1a89..33d109f 100644 --- a/doc/libcfu.texi +++ b/doc/libcfu.texi @@ -490,7 +490,12 @@ cfulist_map(). The return value is used to build a new list. @deftypefun {cfulist_t *} cfulist_new (); - Returns a new list. + Creates a new list. +@end deftypefun + +@deftypefun {cfulist_t *} cfulist_new_with_free_fn (cfulist_free_fn_t @var{ff}) + + Same as cfulist_new() except automatically calls cfulist_set_free_fn(). @end deftypefun @deftypefun {size_t} cfulist_num_entries (cfulist_t *@var{list}) @@ -517,7 +522,8 @@ cfulist_map(). The return value is used to build a new list. @deftypefun {void} cfulist_delete_data_with_free_fn (cfulist_t * @var{list}, void * @var{data}, cfulist_free_fn_t @var{ff}) Deletes the entry in the list associated with value. If ff is not NULL, it - is called for value of the entry passed as its only argument. + is called for value of the entry passed as its only argument. If ff is not NULL, + it overrides any function set previously with cfulist_set_free_function(). @end deftypefun @@ -588,10 +594,12 @@ position in the new list. Free all resources used by the list. @end deftypefun -@deftypefun {void} cfulist_destroy (cfulist_t * @var{list}, cfulist_free_fn_t @var{free_fn}) +@deftypefun {void} cfulist_destroy_with_free_fn (cfulist_t * @var{list}, cfulist_free_fn_t @var{free_fn}) - Free all resources used by the list. If free_fn is not NULL, call it +Free all resources used by the list. If free_fn is not NULL, is called for each element of the list, passing the data to it as a void *. +If free_fn is not NULL, it overrides any function set previously +with cfulist_set_free_function(). @end deftypefun diff --git a/src/cfulist.c b/src/cfulist.c index f32c7e0..57736dd 100644 --- a/src/cfulist.c +++ b/src/cfulist.c @@ -84,10 +84,16 @@ cfulist_new(void) { cfulist_t * cfulist_new_with_free_fn(cfulist_free_fn_t free_fn) { cfulist_t *list = cfulist_new(); - list->free_fn = free_fn; + cfulist_set_free_function (list, free_fn); return list; } +int +cfulist_set_free_function(cfulist_t *list, cfulist_free_fn_t ff) { + if (ff) list->free_fn = ff; + return 0; +} + size_t cfulist_num_entries(cfulist_t *list) { return list->num_entries; diff --git a/src/cfulist.h b/src/cfulist.h index 40da0fb..9531a07 100644 --- a/src/cfulist.h +++ b/src/cfulist.h @@ -65,9 +65,7 @@ typedef void (*cfulist_free_fn_t)(void *data); /* Returns a new list. */ cfulist_t * cfulist_new(void); -/* Same as cfulist_new(), but set a function to be called on each - * element when the list is destroyed. - */ +/* Same as cfulist_new() except automatically calls cfulist_set_free_fn(). */ cfulist_t * cfulist_new_with_free_fn(cfulist_free_fn_t free_fn); /* Returns the number of entries in the list. */