From 898208065545730da8417f25f169ce24a9038526 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Tue, 24 Jul 2018 05:36:59 +0000 Subject: [PATCH] Speed-up getmsgptrs() (reads users/data/*.subs files) by only parsing each section (sub-code) once. Should cut the search/parse algorithm by 66% (since there's 3 keys/values we're searching for, per sub). --- src/sbbs3/userdat.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index a2cdd7f0c7..abc9ce251a 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -3055,12 +3055,16 @@ BOOL DLLCALL getmsgptrs(scfg_t* cfg, user_t* user, subscan_t* subscan, void (*pr for(i = 0; i < cfg->total_subs; i++) { if(progress != NULL) progress(cbdata, i, cfg->total_subs); - subscan[i].ptr = iniGetLongInt(ini, cfg->sub[i]->code, "ptr" , subscan[i].ptr); - subscan[i].last = iniGetLongInt(ini, cfg->sub[i]->code, "last" , subscan[i].last); - subscan[i].cfg = iniGetShortInt(ini, cfg->sub[i]->code, "cfg" , subscan[i].cfg); + str_list_t keys = iniGetSection(ini, cfg->sub[i]->code); + if(keys == NULL) + continue; + subscan[i].ptr = iniGetLongInt(keys, cfg->sub[i]->code, "ptr" , subscan[i].ptr); + subscan[i].last = iniGetLongInt(keys, cfg->sub[i]->code, "last" , subscan[i].last); + subscan[i].cfg = iniGetShortInt(keys, cfg->sub[i]->code, "cfg" , subscan[i].cfg); subscan[i].sav_ptr = subscan[i].ptr; subscan[i].sav_last = subscan[i].last; subscan[i].sav_cfg = subscan[i].cfg; + iniFreeStringList(keys); } iniFreeStringList(ini); fclose(fp); -- GitLab