From 045b1698ecea1bef0c43995eef5a5a4dfa2a59a4 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 2 Sep 2004 01:34:31 +0000
Subject: [PATCH] Replaced get_msg_by_id() and get_msg_by_ftn_id() with
 smb_getmsgidx/hdr_by_msgid/ftnid() for fast auto-thread linkage.

---
 src/sbbs3/getmsg.cpp   | 32 --------------------------------
 src/sbbs3/js_msgbase.c | 10 +++-------
 src/sbbs3/postmsg.cpp  |  6 ++----
 src/sbbs3/qwktomsg.cpp |  7 +++----
 src/sbbs3/sbbs.h       |  1 -
 src/sbbs3/sbbsecho.c   | 35 ++---------------------------------
 6 files changed, 10 insertions(+), 81 deletions(-)

diff --git a/src/sbbs3/getmsg.cpp b/src/sbbs3/getmsg.cpp
index 7733a59cbc..003cc5ca0d 100644
--- a/src/sbbs3/getmsg.cpp
+++ b/src/sbbs3/getmsg.cpp
@@ -500,35 +500,3 @@ ulong sbbs_t::getlastmsg(uint subnum, ulong *ptr, time_t *t)
 	return(total);
 }
 
-/****************************************************************************/
-/* Retrieve a message by RFC822 message-ID									*/
-/****************************************************************************/
-BOOL DLLCALL get_msg_by_id(scfg_t* scfg, smb_t* smb, char* id, smbmsg_t* msg)
-{
-	ulong		n;
-	int			ret;
-
-	for(n=0;n<smb->status.total_msgs;n++) {
-		memset(msg,0,sizeof(smbmsg_t));
-		msg->offset=n;
-		if(smb_getmsgidx(smb, msg)!=0)
-			break;
-
-		if(smb_lockmsghdr(smb,msg)!=0)
-			continue;
-
-		ret=smb_getmsghdr(smb,msg);
-
-		smb_unlockmsghdr(smb,msg); 
-
-		if(ret!=SMB_SUCCESS)
-			continue;
-
-		if(strcmp(get_msgid(scfg,smb->subnum,msg),id)==0)
-			return(TRUE);
-
-		smb_freemsgmem(msg);
-	}
-
-	return(FALSE);
-}
diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c
index 9cc3c2224d..cb068914e8 100644
--- a/src/sbbs3/js_msgbase.c
+++ b/src/sbbs3/js_msgbase.c
@@ -465,11 +465,9 @@ BOOL msg_offset_by_id(scfg_t* scfg, smb_t* smb, char* id, ulong* offset)
 {
 	smbmsg_t msg;
 
-	if(!get_msg_by_id(scfg,smb,id,&msg))
+	if(smb_getmsgidx_by_msgid(smb,&msg,id)!=SMB_SUCCESS)
 		return(FALSE);
 
-	smb_freemsgmem(&msg);
-
 	*offset = msg.offset;
 	return(TRUE);
 }
@@ -614,11 +612,9 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
 			smb_unlockmsghdr(&(p->smb),&msg); 
 			break;
 		} else if(JSVAL_IS_STRING(argv[n]))	{		/* Get by ID */
-			if(!get_msg_by_id(scfg,&(p->smb)
-				,JS_GetStringBytes(JSVAL_TO_STRING(argv[n]))
-				,&msg))
+			if(smb_getmsghdr_by_msgid(&(p->smb),&msg
+				,JS_GetStringBytes(JSVAL_TO_STRING(argv[n])))!=SMB_SUCCESS)
 				return(JS_TRUE);	/* ID not found */
-
 			break;
 		}
 	}
diff --git a/src/sbbs3/postmsg.cpp b/src/sbbs3/postmsg.cpp
index 677ac5a238..47ca5e0501 100644
--- a/src/sbbs3/postmsg.cpp
+++ b/src/sbbs3/postmsg.cpp
@@ -626,10 +626,8 @@ extern "C" int DLLCALL savemsg(scfg_t* cfg, smb_t* smb, smbmsg_t* msg, char* msg
 
 	/* Look-up thread_back if Reply-ID was specified */
 	if(msg->hdr.thread_back==0 && msg->reply_id!=NULL) {
-		if(get_msg_by_id(cfg, smb, msg->reply_id, &remsg)==TRUE) {
-			msg->hdr.thread_back=remsg.hdr.number;	/* needed for threading backward */
-			smb_freemsgmem(&remsg);
-		}
+		if(smb_getmsgidx_by_msgid(smb,&remsg,msg->reply_id)==SMB_SUCCESS)
+			msg->hdr.thread_back=remsg.idx.number;	/* needed for threading backward */
 	}
 
 	/* Auto-thread linkage */
diff --git a/src/sbbs3/qwktomsg.cpp b/src/sbbs3/qwktomsg.cpp
index 4b89b7201e..203cb72338 100644
--- a/src/sbbs3/qwktomsg.cpp
+++ b/src/sbbs3/qwktomsg.cpp
@@ -432,10 +432,9 @@ bool sbbs_t::qwktomsg(FILE *qwk_fp, char *hdrblk, char fromhub, uint subnum
 	}
 
 	if(msg.reply_id!=NULL 
-		&& get_msg_by_id(&cfg, &smb, msg.reply_id, &remsg)==TRUE) {
-		msg.hdr.thread_back=remsg.hdr.number;	/* needed for threading backward */
-		smb_freemsgmem(&remsg);
-	}
+		&& smb_getmsgidx_by_msgid(&smb,&remsg,msg.reply_id)==SMB_SUCCESS)
+		msg.hdr.thread_back=remsg.idx.number;	/* needed for threading backward */
+
 	if(msg.hdr.thread_back
 		&& smb_getstatus(&smb)==SMB_SUCCESS) {
 
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 1414526195..288458c8dd 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -813,7 +813,6 @@ extern "C" {
 	DLLEXPORT ushort	DLLCALL subject_crc(char *subj);
 	DLLEXPORT char *	DLLCALL ftn_msgid(sub_t* sub, smbmsg_t* msg);
 	DLLEXPORT char *	DLLCALL get_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg);
-	DLLEXPORT BOOL		DLLCALL get_msg_by_id(scfg_t* scfg, smb_t* smb, char* id, smbmsg_t* msg);
 	DLLEXPORT char *	DLLCALL ultoac(ulong l,char *str);
 	DLLEXPORT char *	DLLCALL rot13(char* str);
 
diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c
index 8892c52802..8014d9f0d9 100644
--- a/src/sbbs3/sbbsecho.c
+++ b/src/sbbs3/sbbsecho.c
@@ -2249,37 +2249,6 @@ char* getfmsg(FILE *stream, ulong *outlen)
 	return(fbuf);
 }
 
-/****************************************************************************/
-/* Retrieve a message by FTN message-ID										*/
-/* Leaves message header in locked stated!									*/
-/****************************************************************************/
-BOOL DLLCALL get_msg_by_ftn_id(smb_t* smb, char* id, smbmsg_t* msg)
-{
-	ulong		n;
-	
-	for(n=0;n<smb->status.total_msgs;n++) {
-		memset(msg,0,sizeof(smbmsg_t));
-		msg->offset=n;
-		if(smb_getmsgidx(smb, msg)!=0)
-			break;
-
-		if(smb_lockmsghdr(smb,msg)!=0)
-			continue;
-
-		/* should this be case sensitive? */
-		if(smb_getmsghdr(smb,msg)==SMB_SUCCESS 
-			&& msg->ftn_msgid!=NULL
-			&& stricmp(msg->ftn_msgid,id)==0)
-			return(TRUE);
-
-		smb_unlockmsghdr(smb,msg); 
-
-		smb_freemsgmem(msg);
-	}
-
-	return(FALSE);
-}
-
 #define MAX_TAILLEN 1024
 
 /****************************************************************************/
@@ -2646,9 +2615,9 @@ int fmsgtosmsg(uchar* fbuf, fmsghdr_t fmsghdr, uint user, uint subnum)
 	if(msg.ftn_reply!=NULL) {	/* auto-thread linkage */
 
 		if(smb_getstatus(smbfile)==SMB_SUCCESS
-			&& get_msg_by_ftn_id(smbfile, msg.ftn_reply, &remsg)==TRUE) {
+			&& smb_getmsghdr_by_ftnid(smbfile, &remsg, msg.ftn_reply)==SMB_SUCCESS) {
 
-			msg.hdr.thread_back=remsg.hdr.number;	/* needed for threading backward */
+			msg.hdr.thread_back=remsg.idx.number;	/* needed for threading backward */
 
 			/* Add RFC-822 Reply-ID (generate if necessary) */
 			smb_hfield_str(&msg,RFC822REPLYID,get_msgid(&scfg,smbfile->subnum,&remsg));
-- 
GitLab