static void Cmd_UnAlias_f (void) { cmdalias_t *alias; const char *s; if (Cmd_Argc () != 2) { Sys_Printf ("unalias <alias>: erase an existing alias\n"); return; } s = Cmd_Argv (1); alias = Hash_Del (cmd_alias_hash, s); if (alias) { cmdalias_t **a; Cmd_RemoveCommand (alias->name); for (a = &cmd_alias; *a != alias; a = &(*a)->next) ; *a = alias->next; free ((char *) alias->name); free ((char *) alias->value); free (alias); } else { Sys_Printf ("Unknown alias \"%s\"\n", s); } }
static void menu_free (void *_m, void *unused) { int i; menu_item_t *m = (menu_item_t *) _m; if (m->text) free ((char *) m->text); if (m->parent) { // remove self from parent list to avoid double frees for (i = 0; i < m->parent->num_items; i++) if (m->parent->items[i] == m) m->parent->items[i] = 0; } if (m->items) { for (i = 0; i < m->num_items; i++) if (m->items[i]) { m->items[i]->parent = 0; if (m->items[i]->text) Hash_Del (menu_hash, m->items[i]->text); menu_free (m->items[i], 0); } free (m->items); } while (m->pics) { menu_pic_t *p = m->pics; m->pics = p->next; if (p->name) free ((char *) p->name); free (p); } free (m); }
/* Unregisters a command */ VISIBLE int Cmd_RemoveCommand (const char *name) { cmd_function_t *cmd; cmd_function_t **c; cmd = (cmd_function_t *) Hash_Del (cmd_hash, name); if (!cmd) return 0; for (c = &cmd_functions; *c; c = &(*c)->next) if (*c == cmd) break; *c = cmd->next; free (cmd); return 1; }
symbol_t * symtab_removesymbol (symtab_t *symtab, symbol_t *symbol) { symbol_t **s; if (!(symbol = Hash_Del (symtab->tab, symbol->name))) return 0; for (s = &symtab->symbols; *s && *s != symbol; s = & (*s)->next) ; if (!*s) internal_error (0, "symtab_removesymbol"); *s = (*s)->next; if (symtab->symtail == &symbol->next) symtab->symtail = s; symbol->next = 0; symbol->table = 0; return symbol; }