From fdc1bd9ab22a4dbab12a2c092d945c31855b112e Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 11 Oct 2000 23:50:28 +0000
Subject: [PATCH] trashcan() now: ignores leading whitespace supports comments
 (lines starting with semicolon) and negated match-logic (lines starting with
 exclamation point)

---
 src/sbbs3/str.cpp | 46 +++++++++++++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp
index bf680d858e..0543da4320 100644
--- a/src/sbbs3/str.cpp
+++ b/src/sbbs3/str.cpp
@@ -717,6 +717,7 @@ void sbbs_t::dirinfo(uint dirnum)
 /****************************************************************************/
 extern "C" BOOL trashcan(scfg_t* cfg, char* insearch, char* name)
 {
+	char*	p;
 	char	str[128];
 	char	search[81];
 	int		c;
@@ -728,32 +729,47 @@ extern "C" BOOL trashcan(scfg_t* cfg, char* insearch, char* name)
 	if((stream=fopen(str,"r"))==NULL)
 		return(FALSE); 
 
-	found=FALSE;
-
 	sprintf(search,"%.*s",sizeof(search)-1,insearch);
 	strupr(search);
+
+	found=FALSE;
+
 	while(!feof(stream) && !ferror(stream) && !found) {
 		if(!fgets(str,sizeof(str),stream))
 			break;
-		truncsp(str);
-		c=strlen(str);
+		
+		found=FALSE;
+
+		p=str;	
+		while(*p && *p<=' ') p++; /* Skip white-space */
+
+		if(*p==';')		/* comment */
+			continue;
+
+		if(*p=='!')	{	/* !match */
+			found=TRUE;
+			p++;
+		}
+
+		truncsp(p);
+		c=strlen(p);
 		if(c) {
 			c--;
-			strupr(str);
-			if(str[c]=='~') {
-				str[c]=0;
-				if(strstr(search,str))
-					found=TRUE; 
+			strupr(p);
+			if(p[c]=='~') {
+				p[c]=0;
+				if(strstr(search,p))
+					found=!found; 
 			}
 
-			else if(str[c]=='^') {
-				str[c]=0;
-				if(!strncmp(str,search,c))
-					found=TRUE; 
+			else if(p[c]=='^') {
+				p[c]=0;
+				if(!strncmp(p,search,c))
+					found=!found; 
 			}
 
-			else if(!strcmp(str,search))
-				found=TRUE; 
+			else if(!strcmp(p,search))
+				found=!found; 
 		} 
 	}
 	fclose(stream);
-- 
GitLab