fix mixed up cases in cx_ll_at()

Mon, 27 Sep 2021 18:57:17 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 27 Sep 2021 18:57:17 +0200
changeset 440
003aa0a78e1e
parent 439
9a5adedd6de6
child 441
7d5a06e32aa8
child 442
310019ddfe4e

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) {

mercurial