Browse Source

fix #97: stringpair_list_add is now iterative

doc_update_sequoia
Krista Grothoff 6 years ago
parent
commit
7595b6141c
1 changed files with 37 additions and 10 deletions
  1. +37
    -10
      src/stringpair.c

+ 37
- 10
src/stringpair.c View File

@ -101,20 +101,47 @@ DYNAMIC_API stringpair_list_t *stringpair_list_add(
if (stringpair_list == NULL)
return new_stringpair_list(value);
if (stringpair_list->next)
return stringpair_list_add(stringpair_list->next, value);
if (stringpair_list->value == NULL) {
assert(stringpair_list->next == NULL);
stringpair_list->value = value;
return stringpair_list;
stringpair_list_t* list_curr = stringpair_list;
while (list_curr->next)
list_curr = list_curr->next;
// if list end exists without value,
// we fill it in here instead of adding
// a new node.
if (list_curr->value == NULL) {
list_curr->value = value; // ownership goes to us
assert(list_curr->value);
if (list_curr->value == NULL)
return NULL;
return list_curr;
}
list_curr->next = new_stringpair_list(value);
stringpair_list->next = new_stringpair_list(value);
if (stringpair_list->next == NULL)
assert(list_curr->next);
if (list_curr->next == NULL)
return NULL;
return stringpair_list->next;
return list_curr->next;
// if (stringpair_list == NULL)
// return new_stringpair_list(value);
//
// if (stringpair_list->next)
// return stringpair_list_add(stringpair_list->next, value);
//
// if (stringpair_list->value == NULL) {
// assert(stringpair_list->next == NULL);
// stringpair_list->value = value;
// return stringpair_list;
// }
//
// stringpair_list->next = new_stringpair_list(value);
// if (stringpair_list->next == NULL)
// return NULL;
//
// return stringpair_list->next;
}
DYNAMIC_API stringpair_list_t *stringpair_list_append(


Loading…
Cancel
Save