From 2b61e79e430110540d59529d4c76a25246b2dc1c Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sun, 12 Apr 2020 06:06:47 +0000
Subject: [PATCH] Give all the things that can execute JS, access to the
 text.dat strings via the (new) scfg_t.text member. This will make it much
 easier for non-Terminal Server JS modules (and the functions they execute)
 make use of the text.dat strings.

---
 src/sbbs3/jsexec.c   | 3 ++-
 src/sbbs3/load_cfg.c | 4 ++++
 src/sbbs3/mailsrvr.c | 3 ++-
 src/sbbs3/scfgdefs.h | 1 +
 src/sbbs3/services.c | 3 ++-
 src/sbbs3/websrvr.c  | 3 ++-
 6 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index da223d0730..bab42257cf 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -67,6 +67,7 @@ JSContext*	js_cx;
 JSObject*	js_glob;
 js_callback_t	cb;
 scfg_t		scfg;
+char*		text[TOTAL_TEXT];
 ulong		js_max_bytes=JAVASCRIPT_MAX_BYTES;
 ulong		js_cx_stack=JAVASCRIPT_CONTEXT_STACK;
 FILE*		confp;
@@ -1391,7 +1392,7 @@ int main(int argc, char **argv, char** env)
 		fprintf(errfp,"!ERROR changing directory to: %s\n", scfg.ctrl_dir);
 
 	fprintf(statfp,"\nLoading configuration files from %s\n",scfg.ctrl_dir);
-	if(!load_cfg(&scfg,NULL,TRUE,error)) {
+	if(!load_cfg(&scfg,text,TRUE,error)) {
 		fprintf(errfp,"!ERROR loading configuration files: %s\n",error);
 		return(do_bail(1));
 	}
diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c
index b40f249372..4b94fceac1 100644
--- a/src/sbbs3/load_cfg.c
+++ b/src/sbbs3/load_cfg.c
@@ -118,6 +118,7 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error)
 				,TOTAL_TEXT,fname);
 			return(FALSE); 
 		}
+		cfg->text = text;
 	}
 #endif
 
@@ -306,6 +307,9 @@ void DLLCALL free_cfg(scfg_t* cfg)
 	free_chat_cfg(cfg);
 	free_xtrn_cfg(cfg);
 	free_attr_cfg(cfg);
+
+	if(cfg->text != NULL)
+		free_text(cfg->text);
 }
 
 void DLLCALL free_text(char* text[])
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 14adc81b2e..c681cfb37d 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -89,6 +89,7 @@ int dns_getmx(char* name, char* mx, char* mx2
 
 static mail_startup_t* startup=NULL;
 static scfg_t	scfg;
+static char*	text[TOTAL_TEXT];
 static struct xpms_set	*mail_set=NULL;
 static BOOL terminated=FALSE;
 static protected_uint32_t active_clients;
@@ -6038,7 +6039,7 @@ void DLLCALL mail_server(void* arg)
 		lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir);
 		scfg.size=sizeof(scfg);
 		SAFECOPY(error,UNKNOWN_LOAD_ERROR);
-		if(!load_cfg(&scfg, NULL, TRUE, error)) {
+		if(!load_cfg(&scfg, text, TRUE, error)) {
 			lprintf(LOG_CRIT,"!ERROR %s",error);
 			lprintf(LOG_CRIT,"!Failed to load configuration files");
 			cleanup(1);
diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h
index a2235f3779..d2aba430a5 100644
--- a/src/sbbs3/scfgdefs.h
+++ b/src/sbbs3/scfgdefs.h
@@ -614,6 +614,7 @@ typedef struct
 
 	uint16_t		user_backup_level;
 	uint16_t		mail_backup_level;
+	char**			text;
 
 	// Run-time state information (not configuration)
 	int				tls_certificate;
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 0e09ece5b5..c2625c8882 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -71,6 +71,7 @@
 
 static services_startup_t* startup=NULL;
 static scfg_t	scfg;
+static char*	text[TOTAL_TEXT];
 static volatile BOOL	terminated=FALSE;
 static time_t	uptime=0;
 static ulong	served=0;
@@ -1815,7 +1816,7 @@ void DLLCALL services_thread(void* arg)
 		lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir);
 		scfg.size=sizeof(scfg);
 		SAFECOPY(error,UNKNOWN_LOAD_ERROR);
-		if(!load_cfg(&scfg, NULL, TRUE, error)) {
+		if(!load_cfg(&scfg, text, TRUE, error)) {
 			lprintf(LOG_CRIT,"!ERROR %s",error);
 			lprintf(LOG_CRIT,"!Failed to load configuration files");
 			cleanup(1);
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index ad47f6092e..c702ab1218 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -95,6 +95,7 @@ static const char*	error_416="416 Requested Range Not Satisfiable";
 static const char*	error_500="500 Internal Server Error";
 static const char*	error_503="503 Service Unavailable\r\nConnection: close\r\nContent-Length: 0\r\n\r\n";
 static const char*	unknown=STR_UNKNOWN_USER;
+static char*		text[TOTAL_TEXT];
 static int len_503 = 0;
 
 #define TIMEOUT_THREAD_WAIT		60		/* Seconds */
@@ -6990,7 +6991,7 @@ void DLLCALL web_server(void* arg)
 		lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir);
 		scfg.size=sizeof(scfg);
 		SAFECOPY(logstr,UNKNOWN_LOAD_ERROR);
-		if(!load_cfg(&scfg, NULL, TRUE, logstr)) {
+		if(!load_cfg(&scfg, text, TRUE, logstr)) {
 			lprintf(LOG_CRIT,"!ERROR %s",logstr);
 			lprintf(LOG_CRIT,"!FAILED to load configuration files");
 			cleanup(1);
-- 
GitLab