diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c index ceacae7e38353a96132e940f66c8dc208fbc4091..2928749797cce010f19a83c0b488d76a5748df57 100644 --- a/src/sbbs3/load_cfg.c +++ b/src/sbbs3/load_cfg.c @@ -48,6 +48,8 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[]) FILE *instream; read_cfg_text_t txt; + free_cfg(cfg); /* free allocated config parameters */ + memset(&txt,0,sizeof(txt)); txt.openerr= "!ERROR: opening %s for read."; txt.error= "!ERROR: offset %lu in %s:"; @@ -74,6 +76,10 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[]) return(FALSE); if(text!=NULL) { + + /* Free existing text if allocated */ + free_text(text); + strcpy(fname,"text.dat"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { @@ -109,6 +115,28 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[]) return(TRUE); } +void free_cfg(scfg_t* cfg) +{ + free_node_cfg(cfg); + free_main_cfg(cfg); + free_msgs_cfg(cfg); + free_file_cfg(cfg); + free_chat_cfg(cfg); + free_xtrn_cfg(cfg); +} + +void free_text(char* text[]) +{ + int i; + + if(text==NULL) + return; + + for(i=0;i<TOTAL_TEXT;i++) { + FREE_AND_NULL(text[i]); + } +} + /****************************************************************************/ /* If the directory 'path' doesn't exist, create it. */ /****************************************************************************/