diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 5fd0b4d25..6f4fb5b38 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -86,6 +86,7 @@ void free_faction(faction * f) } freelist(f->allies); + free_spellbook(f->spellbook); free(f->email); free(f->banner); free(f->passw); diff --git a/src/magic.c b/src/magic.c index be98bcadd..4d801e7ff 100644 --- a/src/magic.c +++ b/src/magic.c @@ -2984,11 +2984,15 @@ spellbook * get_spellbook(const char * name) return result; } -int free_spellbook_cb(const void *match, const void *key, size_t keylen, void *data) { - spellbook *sb; - cb_get_kv(match, &sb, sizeof(sb)); +void free_spellbook(spellbook *sb) { spellbook_clear(sb); free(sb); +} + +static int free_spellbook_cb(const void *match, const void *key, size_t keylen, void *data) { + spellbook *sb; + cb_get_kv(match, &sb, sizeof(sb)); + free_spellbook(sb); return 0; } diff --git a/src/magic.h b/src/magic.h index ee4c20996..c33d9917e 100644 --- a/src/magic.h +++ b/src/magic.h @@ -363,6 +363,7 @@ extern "C" { struct spellbook * get_spellbook(const char * name); void free_spellbooks(void); + void free_spellbook(struct spellbook *sb); #ifdef __cplusplus } #endif