diff --git a/src/sbbs3/scfg/scfg.h b/src/sbbs3/scfg/scfg.h index f4398763505158824196675e8c0a2f6dd0364458..4b34ed455fbb8154f66e619d1f9f3ded0a8c8a53 100644 --- a/src/sbbs3/scfg/scfg.h +++ b/src/sbbs3/scfg/scfg.h @@ -144,6 +144,7 @@ int bits(long l); void getar(char *desc, char *ar); bool new_sub(unsigned new_subnum, unsigned group_num); bool new_qhub_sub(qhub_t*, unsigned qsubnum, sub_t*, unsigned confnum); +void remove_sub(scfg_t*, unsigned subnum); void sort_subs(int grpnum); void sort_dirs(int libnum); unsigned subs_in_group(unsigned grpnum); diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c index da726b7ddd26eb60e8cda636a0cf6975dc4b63d2..f409fc53651f6d2e656a18e7b6237d652b3ed7c7 100644 --- a/src/sbbs3/scfg/scfgmsg.c +++ b/src/sbbs3/scfg/scfgmsg.c @@ -526,17 +526,7 @@ void msgs_cfg() if (msk == MSK_DEL) { for (j = 0; j < cfg.total_subs;) { if (cfg.sub[j]->grp == grpnum) { /* delete subs of this group */ - free(cfg.sub[j]); - cfg.total_subs--; - k = j; - while (k < cfg.total_subs) { /* move all subs down */ - cfg.sub[k] = cfg.sub[k + 1]; - for (q = 0; q < cfg.total_qhubs; q++) - for (s = 0; s < cfg.qhub[q]->subs; s++) - if (cfg.qhub[q]->sub[s] == cfg.sub[j]) - cfg.qhub[q]->sub[s] = NULL; - k++; - } + remove_sub(&cfg, j); } else j++; } diff --git a/src/sbbs3/scfg/scfgsub.c b/src/sbbs3/scfg/scfgsub.c index 47d7bc64dd5e406b63a3e445f40e16043b82fa95..22708d7de8ada6d5fc8a37868d529737448fce57 100644 --- a/src/sbbs3/scfg/scfgsub.c +++ b/src/sbbs3/scfg/scfgsub.c @@ -95,13 +95,29 @@ bool new_sub(unsigned new_subnum, unsigned group_num) return true; } +void remove_sub(scfg_t* cfg, unsigned subnum) +{ + sub_t* sub = cfg->sub[subnum]; + // Remove the sub-board from any QWKnet hub sub-boards + for (unsigned q = 0; q < cfg->total_qhubs; q++) { + for (unsigned s = 0; s < cfg->qhub[q]->subs; s++) { + if (cfg->qhub[q]->sub[s] == sub) + cfg->qhub[q]->sub[s] = NULL; + } + } + FREE_AND_NULL(cfg->sub[subnum]); + --cfg->total_subs; + for (unsigned i = subnum; i < cfg->total_subs; i++) + cfg->sub[i] = cfg->sub[i + 1]; +} + void sub_cfg(uint grpnum) { static int dflt,tog_dflt,opt_dflt,net_dflt,adv_dflt,bar; char str[128],str2[128],done=0,code[128]; char path[MAX_PATH+1]; char data_dir[MAX_PATH+1]; - int j,m,n,ptridx,q,s; + int j,m,n,ptridx; uint i,subnum[MAX_OPTS+1]; static sub_t savsub; @@ -291,15 +307,7 @@ void sub_cfg(uint grpnum) } if(msk == MSK_CUT) savsub = *cfg.sub[subnum[i]]; - free(cfg.sub[subnum[i]]); - cfg.total_subs--; - for(j=subnum[i];j<cfg.total_subs;j++) - cfg.sub[j]=cfg.sub[j+1]; - for(q=0;q<cfg.total_qhubs;q++) - for(s=0;s<cfg.qhub[q]->subs;s++) { - if(cfg.qhub[q]->sub[s] == cfg.sub[subnum[i]]) - cfg.qhub[q]->sub[s] = NULL; - } + remove_sub(&cfg, subnum[i]); uifc.changes = TRUE; continue; }