From 778ebbc853430bbe0720612a4980cbe371d8186f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 1 Mar 2015 20:02:02 +0300 Subject: Fix memory leak in lang.c on exit. --- src/map/lang.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'src/map/lang.c') diff --git a/src/map/lang.c b/src/map/lang.c index 6264cef..45be125 100644 --- a/src/map/lang.c +++ b/src/map/lang.c @@ -34,9 +34,26 @@ void do_init_langs (void) langsdb_readdb (); } +static int delete_lang_sub(DBKey key __attribute__ ((unused)), + DBData *data, + va_list args __attribute__ ((unused))) +{ + int f; + char **strings = DB->data2ptr(data); + for (f = 0; f < lang_num; f ++) + { + aFree(strings[f]); + strings[f] = NULL; + } + return 0; +} + void do_final_langs(void) { - db_destroy(translate_db); + translate_db->destroy(translate_db, delete_lang_sub); + int f; + for (f = 0; f < lang_num; f ++) + aFree(lang_langs[f]); } static int langsdb_readlangs (void) @@ -123,10 +140,12 @@ static int langsdb_readdb (void) strcpy (strings[0], line1); strdb_put(translate_db, aStrdup (line1), strings); } - - sz = strlen(line2) + 1; - strings[i] = aCalloc (sz < 24 ? 24 : sz, sizeof(char)); - strcpy (strings[i], line2); + else + { + sz = strlen(line2) + 1; + strings[i] = aCalloc (sz < 24 ? 24 : sz, sizeof(char)); + strcpy (strings[i], line2); + } *line1 = 0; *line2 = 0; -- cgit v1.2.3-70-g09d2