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