fix #97: stringpair_list_add is now iterative
authorKrista Grothoff <krista@pep-project.org>
Mon, 11 Jul 2016 16:17:31 +0200
changeset 835166e2038ea52
parent 834 1108548edc67
child 836 8e7dac747b49
fix #97: stringpair_list_add is now iterative
src/stringpair.c
     1.1 --- a/src/stringpair.c	Mon Jul 11 16:15:51 2016 +0200
     1.2 +++ b/src/stringpair.c	Mon Jul 11 16:17:31 2016 +0200
     1.3 @@ -101,20 +101,47 @@
     1.4      if (stringpair_list == NULL)
     1.5          return new_stringpair_list(value);
     1.6  
     1.7 -    if (stringpair_list->next)
     1.8 -        return stringpair_list_add(stringpair_list->next, value);
     1.9 +    stringpair_list_t* list_curr = stringpair_list;
    1.10 +    
    1.11 +    while (list_curr->next)
    1.12 +        list_curr = list_curr->next;
    1.13 + 
    1.14 +    // if list end exists without value,
    1.15 +    // we fill it in here instead of adding
    1.16 +    // a new node.
    1.17 +    if (list_curr->value == NULL) {
    1.18 +        list_curr->value = value; // ownership goes to us
    1.19 +        assert(list_curr->value);
    1.20 +        if (list_curr->value == NULL)
    1.21 +            return NULL;
    1.22 +        return list_curr;
    1.23 +    }
    1.24 +    
    1.25 +    list_curr->next = new_stringpair_list(value);
    1.26  
    1.27 -    if (stringpair_list->value == NULL) {
    1.28 -        assert(stringpair_list->next == NULL);
    1.29 -        stringpair_list->value = value;
    1.30 -        return stringpair_list;
    1.31 -    }
    1.32 -
    1.33 -    stringpair_list->next = new_stringpair_list(value);
    1.34 -    if (stringpair_list->next == NULL)
    1.35 +    assert(list_curr->next);
    1.36 +    if (list_curr->next == NULL)
    1.37          return NULL;
    1.38  
    1.39 -    return stringpair_list->next;
    1.40 +    return list_curr->next;
    1.41 +    
    1.42 +//     if (stringpair_list == NULL)
    1.43 +//         return new_stringpair_list(value);
    1.44 +// 
    1.45 +//     if (stringpair_list->next)
    1.46 +//         return stringpair_list_add(stringpair_list->next, value);
    1.47 +// 
    1.48 +//     if (stringpair_list->value == NULL) {
    1.49 +//         assert(stringpair_list->next == NULL);
    1.50 +//         stringpair_list->value = value;
    1.51 +//         return stringpair_list;
    1.52 +//     }
    1.53 +// 
    1.54 +//     stringpair_list->next = new_stringpair_list(value);
    1.55 +//     if (stringpair_list->next == NULL)
    1.56 +//         return NULL;
    1.57 +// 
    1.58 +//     return stringpair_list->next;
    1.59  }
    1.60  
    1.61  DYNAMIC_API stringpair_list_t *stringpair_list_append(