From dfa39195791c604ea41830928fca3f52dd42f22a Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 22 Aug 2002 19:49:54 +0000
Subject: [PATCH] Changed putnmsg() to a DLL-exported C function (allowing it
 to be called from outside the sbbs_t class).

---
 src/sbbs3/bulkmail.cpp |  2 +-
 src/sbbs3/chat.cpp     | 18 +++++++++---------
 src/sbbs3/email.cpp    |  2 +-
 src/sbbs3/js_bbs.cpp   |  2 +-
 src/sbbs3/logon.cpp    |  2 +-
 src/sbbs3/logout.cpp   |  2 +-
 src/sbbs3/mail.cpp     |  2 +-
 src/sbbs3/putnode.cpp  | 33 ---------------------------------
 src/sbbs3/sbbs.h       |  1 -
 src/sbbs3/un_rep.cpp   |  2 +-
 src/sbbs3/upload.cpp   |  2 +-
 src/sbbs3/userdat.c    | 32 +++++++++++++++++++++++++++++++-
 src/sbbs3/userdat.h    |  2 ++
 src/sbbs3/writemsg.cpp |  2 +-
 14 files changed, 51 insertions(+), 53 deletions(-)

diff --git a/src/sbbs3/bulkmail.cpp b/src/sbbs3/bulkmail.cpp
index 39b6c538ef..3c8d4ae048 100644
--- a/src/sbbs3/bulkmail.cpp
+++ b/src/sbbs3/bulkmail.cpp
@@ -247,7 +247,7 @@ int sbbs_t::bulkmailhdr(uint usernum, smbmsg_t *msg, ushort msgattr, ulong offse
 		if(node.useron==usernum && !(node.misc&NODE_POFF)
 			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 			sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias);
-			putnmsg(i,str);
+			putnmsg(&cfg,i,str);
 			break; } }
 	if(i>cfg.sys_nodes) {   /* User wasn't online, so leave short msg */
 		sprintf(str,text[UserSentYouMail],useron.alias);
diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp
index 4c2ea81f3b..d6c6e0388f 100644
--- a/src/sbbs3/chat.cpp
+++ b/src/sbbs3/chat.cpp
@@ -332,7 +332,7 @@ void sbbs_t::multinodechat(int channel)
 						strcat(buf,crlf);
 						if(useron.chat&CHAT_ECHO)
 							bputs(buf);
-						putnmsg(j,buf);
+						putnmsg(&cfg,j,buf);
 						break;
 					case 'Q':	/* quit */
 						done=1;
@@ -454,7 +454,7 @@ void sbbs_t::multinodechat(int channel)
 									? text[UNKNOWN_USER] : useron.alias
 									,"you");
 								strcat(buf,crlf);
-								putnmsg(usr[j],buf); }
+								putnmsg(&cfg,usr[j],buf); }
 
 
 							/* Display to all other users */
@@ -468,10 +468,10 @@ void sbbs_t::multinodechat(int channel)
 								if(i==j)
 									continue;
 								getnodedat(usr[i],&node,0);
-								putnmsg(usr[i],buf); }
+								putnmsg(&cfg,usr[i],buf); }
 							for(i=0;i<qusrs;i++) {
 								getnodedat(qusr[i],&node,0);
-								putnmsg(qusr[i],buf); }
+								putnmsg(&cfg,qusr[i],buf); }
 							continue; } }
 
 					sprintf(buf,text[ChatLineFmt]
@@ -483,10 +483,10 @@ void sbbs_t::multinodechat(int channel)
 						bputs(buf);
 					for(i=0;i<usrs;i++) {
 						getnodedat(usr[i],&node,0);
-						putnmsg(usr[i],buf); }
+						putnmsg(&cfg,usr[i],buf); }
 					for(i=0;i<qusrs;i++) {
 						getnodedat(qusr[i],&node,0);
-						putnmsg(qusr[i],buf); }
+						putnmsg(&cfg,qusr[i],buf); }
 					if(!usrs && channel && gurubuf
 						&& cfg.chan[channel-1]->misc&CHAN_GURU)
 						guruchat(pgraph,gurubuf,cfg.chan[channel-1]->guru);
@@ -742,7 +742,7 @@ void sbbs_t::privchat(bool local)
 			sprintf(str,text[NodePChatPageMsg]
 				,cfg.node_num,thisnode.misc&NODE_ANON
 					? text[UNKNOWN_USER] : useron.alias);
-			putnmsg(n,str);
+			putnmsg(&cfg,n,str);
 			sprintf(str,"%s paged %s on node %d to private chat"
 				,useron.alias,username(&cfg,node.useron,tmp),n);
 			logline("C",str); }
@@ -1316,7 +1316,7 @@ void sbbs_t::nodemsg()
 						sprintf(buf,text[NodeMsgFmt],cfg.node_num
 							,thisnode.misc&NODE_ANON
 								? text[UNKNOWN_USER] : useron.alias,line);
-						putnmsg(i,buf);
+						putnmsg(&cfg,i,buf);
 						if(!(node.misc&NODE_ANON))
 							bprintf(text[MsgSentToUser],"Message"
 								,username(&cfg,usernumber,tmp),usernumber);
@@ -1338,7 +1338,7 @@ void sbbs_t::nodemsg()
 						if((node.status==NODE_INUSE
 							|| (SYSOP && node.status==NODE_QUIET))
 							&& (SYSOP || !(node.misc&NODE_POFF)))
-							putnmsg(i,buf); }
+							putnmsg(&cfg,i,buf); }
 					sprintf(str,"%s sent message to all nodes",useron.alias);
 					logline("C",str);
 					logline(nulstr,line); 
diff --git a/src/sbbs3/email.cpp b/src/sbbs3/email.cpp
index 6a3fed9189..aa0a2a7830 100644
--- a/src/sbbs3/email.cpp
+++ b/src/sbbs3/email.cpp
@@ -307,7 +307,7 @@ bool sbbs_t::email(int usernumber, char *top, char *subj, long mode)
 		if(node.useron==usernumber && !(node.misc&NODE_POFF)
 			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 			sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias);
-			putnmsg(i,str);
+			putnmsg(&cfg,i,str);
 			break; } }
 	if(i>cfg.sys_nodes) {	/* User wasn't online, so leave short msg */
 		sprintf(str,text[UserSentYouMail],useron.alias);
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index f83fdd6f17..ce99a78042 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -1968,7 +1968,7 @@ js_put_node_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
 	if((msg=JS_GetStringBytes(js_msg))==NULL) 
 		return(JS_FALSE);
 
-	sbbs->putnmsg(node,msg);
+	putnmsg(&sbbs->cfg,node,msg);
 
 	*rval = JSVAL_VOID;
 	return(JS_TRUE);
diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp
index c2ef01f840..a6201b0074 100644
--- a/src/sbbs3/logon.cpp
+++ b/src/sbbs3/logon.cpp
@@ -524,7 +524,7 @@ bool sbbs_t::logon()
 					,cfg.node_num
 					,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
 					,connection);
-				putnmsg(i,str); 
+				putnmsg(&cfg,i,str); 
 			} 
 		}
 
diff --git a/src/sbbs3/logout.cpp b/src/sbbs3/logout.cpp
index 142ce5f218..df1580f8ce 100644
--- a/src/sbbs3/logout.cpp
+++ b/src/sbbs3/logout.cpp
@@ -82,7 +82,7 @@ void sbbs_t::logout()
 					sprintf(str,text[NodeLoggedOff],cfg.node_num
 						,thisnode.misc&NODE_ANON
 						? text[UNKNOWN_USER] : useron.alias);
-					putnmsg(i,str); } }
+					putnmsg(&cfg,i,str); } }
 
 	if(!online) {		/* NOT re-login */
 
diff --git a/src/sbbs3/mail.cpp b/src/sbbs3/mail.cpp
index d7a126aabf..7ccac4cff7 100644
--- a/src/sbbs3/mail.cpp
+++ b/src/sbbs3/mail.cpp
@@ -214,7 +214,7 @@ void sbbs_t::telluser(smbmsg_t* msg)
 			sprintf(str
 				,text[UserReadYourMailNodeMsg]
 				,cfg.node_num,useron.alias);
-			putnmsg(n,str);
+			putnmsg(&cfg,n,str);
 			break; } }
 	if(n>cfg.sys_nodes) {
 		now=time(NULL);
diff --git a/src/sbbs3/putnode.cpp b/src/sbbs3/putnode.cpp
index da8c1b042c..f98fb76eaa 100644
--- a/src/sbbs3/putnode.cpp
+++ b/src/sbbs3/putnode.cpp
@@ -112,39 +112,6 @@ int sbbs_t::putnodedat(uint number, node_t* node)
 	return(0);
 }
 
-/****************************************************************************/
-/* Creates a short message for node 'num' than contains 'strin'             */
-/****************************************************************************/
-int sbbs_t::putnmsg(int num, char *strin)
-{
-    char str[256];
-    int file,i;
-    node_t node;
-
-	sprintf(str,"%smsgs/n%3.3u.msg",cfg.data_dir,num);
-	if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-		return(errno); 
-	}
-	lseek(file,0L,SEEK_END);	// Instead of opening with O_APPEND
-	i=strlen(strin);
-	if(write(file,strin,i)!=i) {
-		close(file);
-		errormsg(WHERE,ERR_WRITE,str,i);
-		return(errno); 
-	}
-	close(file);
-	getnodedat(num,&node,0);
-	if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-		&& !(node.misc&NODE_NMSG)) {
-		getnodedat(num,&node,1);
-		node.misc|=NODE_NMSG;
-		putnodedat(num,&node); 
-	}
-
-	return(0);
-}
-
 int sbbs_t::putnodeext(uint number, char *ext)
 {
     char	str[MAX_PATH+1];
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index be9fc3a09a..34c9de8eb0 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -508,7 +508,6 @@ public:
 	/* putnode.cpp */
 	int		putnodedat(uint number, node_t * node);
 	int		putnodeext(uint number, char * str);
-	int		putnmsg(int num, char *strin);
 
 	/* logonoff.cpp */
 	bool	answer();
diff --git a/src/sbbs3/un_rep.cpp b/src/sbbs3/un_rep.cpp
index 4a7d47de46..a6a2bfa9b6 100644
--- a/src/sbbs3/un_rep.cpp
+++ b/src/sbbs3/un_rep.cpp
@@ -235,7 +235,7 @@ bool sbbs_t::unpack_rep(char* repfile)
 					|| node.status==NODE_QUIET)) {
 					sprintf(str,text[EmailNodeMsg]
 						,cfg.node_num,tmp);
-					putnmsg(k,str);
+					putnmsg(&cfg,k,str);
 					break; } }
 			if(k>cfg.sys_nodes) {
 				sprintf(str,text[UserSentYouMail],tmp);
diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp
index 60793ab078..fb172b0dae 100644
--- a/src/sbbs3/upload.cpp
+++ b/src/sbbs3/upload.cpp
@@ -477,7 +477,7 @@ bool sbbs_t::upload(uint dirnum)
 				if(node.useron==destuser[j] && !(node.misc&NODE_POFF)
 					&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 					sprintf(str,text[UserToUserXferNodeMsg],cfg.node_num,useron.alias);
-					putnmsg(i,str);
+					putnmsg(&cfg,i,str);
 					break; } }
 			if(i>cfg.sys_nodes) {   /* User not online */
 				sprintf(str,text[UserSentYouFile],useron.alias);
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index 6ec15eb633..075f7b8803 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -967,7 +967,7 @@ uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen,
 }
 
 /****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'           */
+/* Creates a short message for 'usernumber' that contains 'strin'           */
 /****************************************************************************/
 int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin)
 {
@@ -998,6 +998,36 @@ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin)
 	return(0);
 }
 
+/****************************************************************************/
+/* Creates a short message for node 'num' that contains 'strin'             */
+/****************************************************************************/
+int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin)
+{
+    char str[256];
+    int file,i;
+    node_t node;
+
+	sprintf(str,"%smsgs/n%3.3u.msg",cfg->data_dir,num);
+	if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
+		return(errno); 
+	lseek(file,0L,SEEK_END);	// Instead of opening with O_APPEND
+	i=strlen(strin);
+	if(write(file,strin,i)!=i) {
+		close(file);
+		return(errno); 
+	}
+	close(file);
+	getnodedat(cfg,num,&node,NULL);
+	if((node.status==NODE_INUSE || node.status==NODE_QUIET)
+		&& !(node.misc&NODE_NMSG)) {
+		getnodedat(cfg,num,&node,&file);
+		node.misc|=NODE_NMSG;
+		putnodedat(cfg,num,&node,file); 
+	}
+
+	return(0);
+}
+
 static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user)
 {
 	BOOL	result,not,or,equal;
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index b538874a1b..aeec2f7114 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -88,6 +88,8 @@ DLLEXPORT void	DLLCALL packchatpass(char *pass, node_t* node);
 DLLEXPORT char* DLLCALL unpackchatpass(char *pass, node_t* node);
 
 DLLEXPORT int	DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin);
+DLLEXPORT int	DLLCALL putnmsg(scfg_t* cfg, int num, char *strin);
+
 DLLEXPORT uint	DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, char *dat
 							,BOOL del);
 
diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp
index ab04b431ea..67cd052ef7 100644
--- a/src/sbbs3/writemsg.cpp
+++ b/src/sbbs3/writemsg.cpp
@@ -964,7 +964,7 @@ void sbbs_t::forwardmail(smbmsg_t *msg, int usernumber)
 		if(node.useron==usernumber && !(node.misc&NODE_POFF)
 			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
 			sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias);
-			putnmsg(i,str);
+			putnmsg(&cfg,i,str);
 			break; } }
 	if(i>cfg.sys_nodes) {	/* User wasn't online, so leave short msg */
 		sprintf(str,text[UserSentYouMail],useron.alias);
-- 
GitLab