1.1 --- a/src/linked_list.c Sun Oct 03 16:02:53 2021 +0200 1.2 +++ b/src/linked_list.c Sun Oct 03 16:30:47 2021 +0200 1.3 @@ -45,25 +45,27 @@ 1.4 return cur; 1.5 } 1.6 1.7 -void *cx_linked_list_last(void **begin, void **end, ptrdiff_t loc_next) { 1.8 - if (end != NULL) { 1.9 - return *end; 1.10 - } else { 1.11 - if (begin == NULL || *begin == NULL) 1.12 - return NULL; 1.13 +void *cx_linked_list_last(void *begin, ptrdiff_t loc_next) { 1.14 + if (begin == NULL) 1.15 + return NULL; 1.16 1.17 - void *cur = *begin; 1.18 - void *last; 1.19 - do { 1.20 - last = cur; 1.21 - } while ((cur = *CX_LL_PTR(cur, loc_next)) != NULL); 1.22 + void *cur = begin; 1.23 + void *last; 1.24 + do { 1.25 + last = cur; 1.26 + } while ((cur = *CX_LL_PTR(cur, loc_next)) != NULL); 1.27 1.28 - return last; 1.29 - } 1.30 + return last; 1.31 } 1.32 1.33 void cx_linked_list_add(void **begin, void **end, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node) { 1.34 - void *last = cx_linked_list_last(begin, end, loc_next); 1.35 + void *last; 1.36 + if (end == NULL) { 1.37 + assert(begin != NULL); 1.38 + last = cx_linked_list_last(*begin, loc_next); 1.39 + } else { 1.40 + last = *end; 1.41 + } 1.42 if (last == NULL) { 1.43 assert(begin != NULL); 1.44 *begin = new_node; 1.45 @@ -75,7 +77,7 @@ 1.46 1.47 // if there is an end pointer, update it 1.48 if (end != NULL) { 1.49 - *end = cx_linked_list_last(&new_node, NULL, loc_next); 1.50 + *end = cx_linked_list_last(new_node, loc_next); 1.51 } 1.52 1.53 // if the nodes use a prev pointer, update it 1.54 @@ -224,8 +226,8 @@ 1.55 1.56 static void *cx_ll_last(cx_list_s *list) { 1.57 cx_linked_list *ll = (cx_linked_list *) list; 1.58 - cx_linked_list_node *last = cx_linked_list_last(NULL, (void **) &ll->end, CX_LL_LOC_NEXT); 1.59 - return &last->payload; 1.60 + cx_linked_list_node *last = ll->end; 1.61 + return last == NULL ? NULL : &last->payload; 1.62 } 1.63 1.64 static cx_list_class cx_linked_list_class = {