From 48578939c5d60d88d434dd97282d7c193a33131d Mon Sep 17 00:00:00 2001 From: Thomas Arp Date: Thu, 10 Mar 2011 22:34:46 +0000 Subject: [PATCH] memory leak in ibt fixed --- src/ibt.c | 19 +++++++++++++++++++ src/ibt.h | 1 + src/oasis.c | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/src/ibt.c b/src/ibt.c index adee7b7..932a8d2 100755 --- a/src/ibt.c +++ b/src/ibt.c @@ -877,6 +877,25 @@ static void ibtedit_save(struct descriptor_data *d) save_ibt_file(OLC_VAL(d)); } + +void free_olc_ibt(IBT_DATA *toFree) { + if (!toFree) + return; + + if (toFree->text) { + STRFREE(toFree->text); + } + if (toFree->body) { + STRFREE(toFree->body); + } + if (toFree->name) { + STRFREE(toFree->name); + } + if (toFree->notes) { + STRFREE(toFree->notes); + } + free(toFree); +} /*-------------------------------------------------------------------*/ /* main ibtedit menu function... */ static void ibtedit_disp_main_menu(struct descriptor_data *d) diff --git a/src/ibt.h b/src/ibt.h index 6ceab86..d2e7668 100755 --- a/src/ibt.h +++ b/src/ibt.h @@ -98,3 +98,4 @@ void load_ibt_file(int mode); void ibtedit_parse(struct descriptor_data *d, char *arg); void ibtedit_string_cleanup(struct descriptor_data *d, int terminator); void free_ibt_lists(); +void free_olc_ibt(IBT_DATA *toFree); diff --git a/src/oasis.c b/src/oasis.c index 0a42b2b..2f3349c 100644 --- a/src/oasis.c +++ b/src/oasis.c @@ -25,6 +25,7 @@ #include "act.h" #include "handler.h" /* for is_name */ #include "quest.h" +#include "ibt.h" /* Internal Data Structures */ @@ -174,6 +175,11 @@ void cleanup_olc(struct descriptor_data *d, byte cleanup_type) } } + if (OLC_IBT(d)) { + free_olc_ibt(OLC_IBT(d)); + OLC_IBT(d) = NULL; + } + /* Free storage if allocated (tedit, aedit, and trigedit). This is the command * list - it's been copied to disk already, so just free it -Welcor. */ if (OLC_STORAGE(d)) {