X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils%2Fllist.c;h=8a5e3f258a60d7e2863bc09585a685881a62ea49;hb=8b3cabcc3ff88a9b676bb29aa1f14f1036ef19c8;hp=e042c99df1c81bb3b55482f8a6b8b5470a20d388;hpb=0f15d3bfce3c5953c520f19a8d0220791fdb2c32;p=sysdb.git diff --git a/src/utils/llist.c b/src/utils/llist.c index e042c99..8a5e3f2 100644 --- a/src/utils/llist.c +++ b/src/utils/llist.c @@ -69,6 +69,26 @@ struct sdb_llist_iter { * private helper functions */ +static void +llist_clear(sdb_llist_t *list) +{ + sdb_llist_elem_t *elem; + + assert(list); + elem = list->head; + while (elem) { + sdb_llist_elem_t *tmp = elem->next; + + sdb_object_deref(elem->obj); + free(elem); + + elem = tmp; + } + + list->head = list->tail = NULL; + list->length = 0; +} /* llist_clear */ + /* Insert a new element after 'elem'. If 'elem' is NULL, insert at the head of * the list. */ static int @@ -121,7 +141,7 @@ llist_insert_after(sdb_llist_t *list, sdb_llist_elem_t *elem, static sdb_llist_elem_t * llist_search(sdb_llist_t *list, - sdb_llist_lookup_cb lookup, const void *user_data) + sdb_object_lookup_cb lookup, const void *user_data) { sdb_llist_elem_t *elem; @@ -213,31 +233,27 @@ sdb_llist_clone(sdb_llist_t *list) void sdb_llist_destroy(sdb_llist_t *list) { - sdb_llist_elem_t *elem; - if (! list) return; pthread_rwlock_wrlock(&list->lock); - - elem = list->head; - while (elem) { - sdb_llist_elem_t *tmp = elem->next; - - sdb_object_deref(elem->obj); - free(elem); - - elem = tmp; - } - - list->head = list->tail = NULL; - list->length = 0; - + llist_clear(list); pthread_rwlock_unlock(&list->lock); pthread_rwlock_destroy(&list->lock); free(list); } /* sdb_llist_destroy */ +void +sdb_llist_clear(sdb_llist_t *list) +{ + if (! list) + return; + + pthread_rwlock_wrlock(&list->lock); + llist_clear(list); + pthread_rwlock_unlock(&list->lock); +} /* sdb_llist_clear */ + int sdb_llist_append(sdb_llist_t *list, sdb_object_t *obj) { @@ -281,7 +297,7 @@ sdb_llist_insert(sdb_llist_t *list, sdb_object_t *obj, size_t idx) int sdb_llist_insert_sorted(sdb_llist_t *list, - sdb_object_t *obj, sdb_llist_cmp_cb compare) + sdb_object_t *obj, sdb_object_cmp_cb compare) { sdb_llist_elem_t *prev; sdb_llist_elem_t *next; @@ -327,7 +343,7 @@ sdb_llist_get(sdb_llist_t *list, size_t i) sdb_object_t * sdb_llist_search(sdb_llist_t *list, - sdb_llist_lookup_cb lookup, const void *user_data) + sdb_object_lookup_cb lookup, const void *user_data) { sdb_llist_elem_t *elem; @@ -366,7 +382,7 @@ sdb_llist_search_by_name(sdb_llist_t *list, const char *key) sdb_object_t * sdb_llist_remove(sdb_llist_t *list, - sdb_llist_lookup_cb lookup, const void *user_data) + sdb_object_lookup_cb lookup, const void *user_data) { sdb_llist_elem_t *elem; sdb_object_t *obj = NULL; @@ -453,7 +469,7 @@ sdb_llist_iter_destroy(sdb_llist_iter_t *iter) free(iter); } /* sdb_llist_iter_destroy */ -_Bool +bool sdb_llist_iter_has_next(sdb_llist_iter_t *iter) { if (! iter)