X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fstr_list.c;h=2323c8ecd32df291702c154cf091130cf265df81;hb=0029afd9026a9f82c68c86a81be306ff835a30d5;hp=1d217469ca6218607f448cb321b4869857aa5aa2;hpb=733d8409723a397b4ced39ea7aaab8bc8b4af5d9;p=oweals%2Fopkg-lede.git diff --git a/libopkg/str_list.c b/libopkg/str_list.c index 1d21746..2323c8e 100644 --- a/libopkg/str_list.c +++ b/libopkg/str_list.c @@ -16,45 +16,55 @@ */ #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) { + 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); + 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_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) +void str_list_push(str_list_t *list, char *data) { - return void_list_push((void_list_t *) list, data); + void_list_push((void_list_t *) list, xstrdup(data)); } str_list_elt_t *str_list_pop(str_list_t *list) @@ -62,15 +72,42 @@ str_list_elt_t *str_list_pop(str_list_t *list) return (str_list_elt_t *) void_list_pop((void_list_t *) list); } -str_list_elt_t *str_list_remove(str_list_t *list, str_list_elt_t **iter) +void str_list_remove(str_list_t *list, str_list_elt_t **iter) { - return (str_list_elt_t *) void_list_remove((void_list_t *) list, + char *str = void_list_remove((void_list_t *) list, (void_list_elt_t **) iter); + + if (str) + free(str); } -char *str_list_remove_elt(str_list_t *list, const char *target_str) +void str_list_remove_elt(str_list_t *list, const char *target_str) { - return (char *)void_list_remove_elt((void_list_t *) list, + char *str = void_list_remove_elt((void_list_t *) list, (void *)target_str, (void_list_cmp_t)strcmp); + if (str) + free(str); +} + +str_list_elt_t *str_list_first(str_list_t *list) { + return (str_list_elt_t * )void_list_first((void_list_t *) list); +} + +str_list_elt_t *str_list_prev(str_list_t *list, str_list_elt_t *node) { + return (str_list_elt_t * )void_list_prev((void_list_t *) list, (void_list_elt_t *)node); +} + +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); +} + +str_list_elt_t *str_list_last(str_list_t *list) { + return (str_list_elt_t * )void_list_last((void_list_t *) list); +} + + +void str_list_purge(str_list_t *list) { + str_list_deinit(list); + free(list); }