X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=0ea2d07a977917ff66bd78ee235ab61e10e95031;hp=4b436322c94fc5d0f6639402d909eb5cb134e171;hb=960545869c00aa3c8fc0068282f52ce55f4603c1;hpb=d5b164ca36a0a0554c6a9277262de2c940f37ff4 diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 4b436322..0ea2d07a 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -953,6 +953,7 @@ void GetOptions(int argc, char *argv[], options.execute_command = NULL; options.special_flags = NULL; + options.mytapes = FALSE; options.serveronly = FALSE; options.network = FALSE; options.verbose = FALSE; @@ -1063,6 +1064,10 @@ void GetOptions(int argc, char *argv[], if (option_arg == next_option) options_left++; } + else if (strncmp(option, "-mytapes", option_len) == 0) + { + options.mytapes = TRUE; + } else if (strncmp(option, "-network", option_len) == 0) { options.network = TRUE; @@ -2068,20 +2073,33 @@ void deleteNodeFromList(ListNode **node_first, char *key, if (strEqual((*node_first)->key, key)) { - checked_free((*node_first)->key); + // after first recursion, (*node_first)->prev->next == *node_first, + // so *node_first would be overwritten with (*node_first)->next + // => use a copy of *node_first (and later of (*node_first)->next) + ListNode *node = *node_first; + ListNode *node_next = node->next; + + checked_free(node->key); if (destructor_function) - destructor_function((*node_first)->content); + destructor_function(node->content); - if ((*node_first)->next) - (*node_first)->next->prev = (*node_first)->prev; + if (node->prev) + node->prev->next = node->next; - checked_free(*node_first); + if (node->next) + node->next->prev = node->prev; - *node_first = (*node_first)->next; + checked_free(node); + + // after removing node, set list pointer to next valid list node + // (this is important if the first node of the list was deleted) + *node_first = node_next; } else + { deleteNodeFromList(&(*node_first)->next, key, destructor_function); + } } ListNode *getNodeFromKey(ListNode *node_first, char *key)