src/linked_list.c

changeset 407
b447539ec255
parent 406
9cbea761fbf7
child 408
dfdd571550f8
     1.1 --- a/src/linked_list.c	Mon Feb 08 00:14:07 2021 +0100
     1.2 +++ b/src/linked_list.c	Mon Feb 08 00:18:09 2021 +0100
     1.3 @@ -155,7 +155,7 @@
     1.4  CxList cxLinkedListCreate(CxAllocator allocator, CxListComparator comparator, size_t item_size) {
     1.5      CxLinkedListDesc desc;
     1.6      desc.item_size = item_size;
     1.7 -    desc.begin = desc.end = NULL;
     1.8 +    desc.begin = NULL;
     1.9      desc.loc_prev = offsetof(struct cx_linked_list_node, prev);
    1.10      desc.loc_next = offsetof(struct cx_linked_list_node, next);
    1.11  
    1.12 @@ -174,8 +174,7 @@
    1.13      list->data.capacity = SIZE_MAX;
    1.14  
    1.15      cx_linked_list *ll = (cx_linked_list *) list->data.listdata;
    1.16 -    ll->begin = desc.begin ? *desc.begin : NULL;
    1.17 -    ll->end = desc.end ? *desc.end : NULL;
    1.18 +    ll->begin = desc.begin;
    1.19      ll->loc_prev = desc.loc_prev;
    1.20      ll->loc_next = desc.loc_next;
    1.21      cxLinkedListRecalculateSize(list);
    1.22 @@ -188,13 +187,17 @@
    1.23  
    1.24      if (ll->begin == NULL) {
    1.25          list->data.size = 0;
    1.26 +        ll->end = NULL;
    1.27          return 0;
    1.28      } else {
    1.29          void *cur = ll->begin;
    1.30 +        void *last;
    1.31          size_t size;
    1.32          do {
    1.33 +            last = cur;
    1.34              size++;
    1.35          } while ((cur = *CX_LL_PTR(cur, ll->loc_next)) != NULL);
    1.36 +        ll->end = last;
    1.37          list->data.size = size;
    1.38          return size;
    1.39      }

mercurial