X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fstr_list.c;h=79bed03abf8b9e7de5982bf8f8daa01b1279be21;hp=1d217469ca6218607f448cb321b4869857aa5aa2;hb=980cfb2e931935a2bd34addccd073811ad1db8e7;hpb=733d8409723a397b4ced39ea7aaab8bc8b4af5d9 diff --git a/libopkg/str_list.c b/libopkg/str_list.c index 1d21746..79bed03 100644 --- a/libopkg/str_list.c +++ b/libopkg/str_list.c @@ -15,62 +15,88 @@ General Public License for more details. */ -#include "includes.h" - #include "str_list.h" +#include "libbb/libbb.h" -int str_list_elt_init(str_list_elt_t *elt, char *data) +void str_list_elt_init(str_list_elt_t * elt, char *data) { - return void_list_elt_init((void_list_elt_t *) elt, data); + void_list_elt_init((void_list_elt_t *) elt, data); } -void str_list_elt_deinit(str_list_elt_t *elt) +void str_list_elt_deinit(str_list_elt_t * elt) { - void_list_elt_deinit((void_list_elt_t *) elt); + if (elt->data) + free(elt->data); + void_list_elt_deinit((void_list_elt_t *) elt); } str_list_t *str_list_alloc() { - str_list_t *list = (str_list_t *)calloc(1, sizeof(str_list_t)); - if (list) - str_list_init(list); - return list; + str_list_t *list = xcalloc(1, sizeof(str_list_t)); + str_list_init(list); + return list; } -int str_list_init(str_list_t *list) +void str_list_init(str_list_t * list) { - return void_list_init((void_list_t *) list); + void_list_init((void_list_t *) list); } -void str_list_deinit(str_list_t *list) +void str_list_deinit(str_list_t * list) { - void_list_deinit((void_list_t *) list); + str_list_elt_t *elt; + while (!void_list_empty(list)) { + elt = str_list_first(list); + if (!elt) + return; + list_del_init(&elt->node); + free(elt->data); + elt->data = NULL; + free(elt); + } } -int str_list_append(str_list_t *list, char *data) +void str_list_append(str_list_t * list, char *data) { - return void_list_append((void_list_t *) list, data); + void_list_append((void_list_t *) list, xstrdup(data)); } -int str_list_push(str_list_t *list, char *data) +str_list_elt_t *str_list_pop(str_list_t * list) { - return void_list_push((void_list_t *) list, data); + return (str_list_elt_t *) void_list_pop((void_list_t *) list); } -str_list_elt_t *str_list_pop(str_list_t *list) +void str_list_remove(str_list_t * list, str_list_elt_t ** iter) { - return (str_list_elt_t *) void_list_pop((void_list_t *) list); + char *str = void_list_remove((void_list_t *) list, + (void_list_elt_t **) iter); + + if (str) + free(str); } -str_list_elt_t *str_list_remove(str_list_t *list, str_list_elt_t **iter) +void str_list_remove_elt(str_list_t * list, const char *target_str) { - return (str_list_elt_t *) void_list_remove((void_list_t *) list, - (void_list_elt_t **) iter); + char *str = void_list_remove_elt((void_list_t *) list, + (void *)target_str, + (void_list_cmp_t) strcmp); + if (str) + free(str); } -char *str_list_remove_elt(str_list_t *list, const char *target_str) +str_list_elt_t *str_list_first(str_list_t * list) { - return (char *)void_list_remove_elt((void_list_t *) list, - (void *)target_str, - (void_list_cmp_t)strcmp); + return (str_list_elt_t *) void_list_first((void_list_t *) list); +} + +str_list_elt_t *str_list_next(str_list_t * list, str_list_elt_t * node) +{ + return (str_list_elt_t *) void_list_next((void_list_t *) list, + (void_list_elt_t *) node); +} + +void str_list_purge(str_list_t * list) +{ + str_list_deinit(list); + free(list); }