Mon, 27 Sep 2021 18:57:17 +0200
fix mixed up cases in cx_ll_at()
src/linked_list.c | file | annotate | diff | comparison | revisions |
1.1 --- a/src/linked_list.c Mon Sep 27 18:50:07 2021 +0200 1.2 +++ b/src/linked_list.c Mon Sep 27 18:57:17 2021 +0200 1.3 @@ -152,12 +152,14 @@ 1.4 static void *cx_ll_at(cx_list_s *list, size_t index) { 1.5 cx_linked_list *ll = (cx_linked_list *) list; 1.6 struct cx_linked_list_node *node; 1.7 - if (index > list->size / 2) { 1.8 + if (index >= list->size) { 1.9 + node = NULL; 1.10 + } else if (index > list->size / 2) { 1.11 + node = cx_linked_list_at(ll->end, list->size, CX_LL_LOC_PREV, index); 1.12 + } else { 1.13 node = cx_linked_list_at(ll->begin, 0, CX_LL_LOC_NEXT, index); 1.14 - } else { 1.15 - node = cx_linked_list_at(ll->end, list->size, CX_LL_LOC_PREV, index); 1.16 } 1.17 - return &node->payload; 1.18 + return node == NULL ? NULL : &node->payload; 1.19 } 1.20 1.21 static size_t cx_ll_find(cx_list_s *list, void *elem) {