From dd2f146e274d6f2e3ce2bfaee2bfa6cb49628962 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 7 Sep 2016 17:09:37 +0100 Subject: [PATCH] fix equipment static memory leak --- src/kernel/config.c | 2 ++ src/kernel/equipment.c | 12 ++++++++++++ src/kernel/equipment.h | 1 + 3 files changed, 15 insertions(+) diff --git a/src/kernel/config.c b/src/kernel/config.c index 4758b36c8..7fae8df23 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -31,6 +31,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "building.h" #include "calendar.h" #include "direction.h" +#include "equipment.h" #include "faction.h" #include "group.h" #include "item.h" @@ -1079,6 +1080,7 @@ void free_gamedata(void) { int i; free_donations(); + free_equipment(); for (i = 0; i != MAXLOCALES; ++i) { if (defaults[i]) { diff --git a/src/kernel/equipment.c b/src/kernel/equipment.c index 1511e2865..f5bd2fd29 100644 --- a/src/kernel/equipment.c +++ b/src/kernel/equipment.c @@ -223,3 +223,15 @@ void equip_items(struct item **items, const struct equipment *eq) } } } + +void free_equipment(void) { + equipment **eqp = &equipment_sets; + while (*eqp) { + equipment *eq = *eqp; + *eqp = eq->next; + free(eq->name); + spellbook_clear(eq->spellbook); + // TODO: items, subsets + free(eq); + } +} diff --git a/src/kernel/equipment.h b/src/kernel/equipment.h index 0bda6dc7d..1ce454111 100644 --- a/src/kernel/equipment.h +++ b/src/kernel/equipment.h @@ -75,6 +75,7 @@ extern "C" { int mask); void equip_items(struct item **items, const struct equipment *eq); + void free_equipment(void); #ifdef __cplusplus } #endif