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->prev)
+ node->prev->next = node->next;
- if ((*node_first)->next)
- (*node_first)->next->prev = (*node_first)->prev;
+ if (node->next)
+ node->next->prev = node->prev;
- checked_free(*node_first);
+ checked_free(node);
- *node_first = (*node_first)->next;
+ // 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)
return getStringCat2(map_token_prefix[i][1], &token[len_token_prefix]);
}
+ // change tokens containing ".gfx" by moving the "gfx" part to the very left
+ char *gfx_substring = ".gfx";
+ char *gfx_prefix = "gfx.";
+ if (strstr(token, gfx_substring) != NULL)
+ {
+ char *token_prefix = getStringCopy(token);
+ char *token_gfx_pos = strstr(token_prefix, gfx_substring);
+ char *token_suffix = &token_gfx_pos[strlen(gfx_substring)];
+ char *mapped_token;
+
+ // cut off token string at ".gfx" substring position
+ *token_gfx_pos = '\0';
+
+ // put together prefix "gfx." and token prefix and suffix without ".gfx"
+ mapped_token = getStringCat3(gfx_prefix, token_prefix, token_suffix);
+
+ free(token_prefix);
+
+ return mapped_token;
+ }
+
return NULL;
}
}
END_HASH_ITERATION(valid_file_hash_tmp, itr)
- /* free temporary hash used for iteration */
+ /* free temporary hash used for iteration */
freeSetupFileHash(valid_file_hash_tmp);
/* read parameters for all known config file tokens */