static void Node_free(Node *n) { if(n != NULL) { int i; for(i = 0; i < NUM_CHARS; i++) if(n->nodes[i]) Node_free(n->nodes[i]); free(n); } }
static Node *Node_create() { Node *n = malloc(sizeof(*n)); check(n != NULL, "Out of memory"); memset(n, 0, sizeof(*n)); n->occupied = 0; return n; error: Node_free(n); return NULL; }
void Trie_free_traverse(struct node* start) { assert(start); struct node* next; int i, num; num = Node_childno(start); for (i = 0; i < num; i++) { next = start -> child[i]; Trie_free_traverse(next); } Node_free(start); }
void FileIndex_free(FileIndex *fi) { if(fi) { Node_free(fi->trie); free(fi); } }