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)) {