From 0dfbbbc6e7958ace2c7f7c4ed24624225fa0343f Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Mon, 30 Nov 2020 15:14:46 -0800
Subject: [PATCH] Revert "Better native vs. DOS cmd-line detection in cmdstr()"

This reverts commit 1597e9a9ce13625ad8710fc9b737926347b6d281.
---
 src/sbbs3/sbbs.h     | 16 +++++++++++++++-
 src/sbbs3/sbbsdefs.h |  1 +
 src/sbbs3/xtrn.cpp   | 22 +++++++++++-----------
 3 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 4b3ae49017..18d963b305 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1,4 +1,6 @@
 /* Synchronet class (sbbs_t) definition and exported function prototypes */
+// vi: tabstop=4
+/* $Id: sbbs.h,v 1.583 2020/08/17 00:48:28 rswindell Exp $ */
 
 /****************************************************************************
  * @format.tab-size 4		(Plain Text/Source Code File Header)			*
@@ -13,9 +15,21 @@
  * See the GNU General Public License for more details: gpl.txt or			*
  * http://www.fsf.org/copyleft/gpl.html										*
  *																			*
+ * Anonymous FTP access to the most recent released source is available at	*
+ * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
+ *																			*
+ * Anonymous CVS access to the development source and modification history	*
+ * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
+ * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
+ *     (just hit return, no password is necessary)							*
+ * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
+ *																			*
  * For Synchronet coding style and modification guidelines, see				*
  * http://www.synchro.net/source.html										*
  *																			*
+ * You are encouraged to submit any modifications (preferably in Unix diff	*
+ * format) via e-mail to mods@synchro.net									*
+ *																			*
  * Note: If this box doesn't appear square, then you need to fix your tabs.	*
  ****************************************************************************/
 
@@ -661,7 +675,7 @@ public:
 	bool	inputnstime32(time32_t *dt);
 	bool	inputnstime(time_t *dt);
 	bool	chkpass(char *pass, user_t* user, bool unique);
-	char *	cmdstr(const char *instr, const char *fpath, const char *fspec, char *outstr, long mode = 0);
+	char *	cmdstr(const char *instr, const char *fpath, const char *fspec, char *outstr, long mode = EX_UNSPECIFIED);
 	char	cmdstr_output[512];
 
 	void	subinfo(uint subnum);
diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index af558b63f2..f57703edcb 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -842,6 +842,7 @@ enum {							/* readmail and delmailidx which types		*/
 #define EX_JS_CX	(1<<24)		/* New JavaScript context */
 #define EX_NOLOG	(1<<30)		/* Don't log intercepted stdio				*/
 #define EX_CONIO	(1<<31)		/* Intercept Windows console I/O (doorway)	*/
+#define EX_UNSPECIFIED	-1
 
 #if defined(__unix__)
 #define EX_WILDCARD	EX_SH		/* Expand wildcards using 'sh' on Unix		*/
diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp
index a998cca7af..fb31c73df4 100644
--- a/src/sbbs3/xtrn.cpp
+++ b/src/sbbs3/xtrn.cpp
@@ -226,10 +226,7 @@ static bool native_executable(scfg_t* cfg, const char* cmdline, long mode)
 	unsigned i;
 
 	if(mode&EX_NATIVE)
-		return true;
-
-	if(*cmdline == '?' || *cmdline == '*')
-		return true;
+		return(TRUE);
 
     SAFECOPY(str,cmdline);				/* Set str to program name only */
 	truncstr(str," ");
@@ -1842,6 +1839,9 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
 	char	str[MAX_PATH+1],*cmd;
     int		i,j,len;
 
+	if(mode == EX_UNSPECIFIED && (*instr == '?' || *instr == '*'))
+		mode = EX_NATIVE;
+
     if(outstr==NULL)
         cmd=cmdstr_output;
     else
@@ -1874,7 +1874,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
                 case 'F':   /* File path */
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode)
+					if(!(mode & EX_NATIVE)
 						&& strncmp(fpath, cfg.node_dir, strlen(cfg.node_dir)) == 0) {
 						strncat(cmd, DOSEMU_NODE_DIR, avail);
 						strncat(cmd, fpath + strlen(cfg.node_dir), avail);
@@ -1885,7 +1885,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
                 case 'G':   /* Temp directory */
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode))
+					if(!(mode & EX_NATIVE))
 						strncat(cmd, DOSEMU_TEMP_DIR, avail);
 					else
 #endif
@@ -1899,7 +1899,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
                 case 'J':
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode))
+					if(!(mode & EX_NATIVE))
 						strncat(cmd, DOSEMU_DATA_DIR, avail);
 					else
 #endif
@@ -1907,7 +1907,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
                 case 'K':
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode)))
+					if(!(mode & EX_NATIVE))
 						strncat(cmd, DOSEMU_CTRL_DIR, avail);
 					else
 #endif
@@ -1921,7 +1921,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
                 case 'N':   /* Node Directory (same as SBBSNODE environment var) */
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode))
+					if(!(mode & EX_NATIVE))
 						strncat(cmd, DOSEMU_NODE_DIR, avail);
 					else
 #endif
@@ -1966,7 +1966,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
                 case 'Z':
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode))
+					if(!(mode & EX_NATIVE))
 						strncat(cmd, DOSEMU_TEXT_DIR, avail);
 					else
 #endif
@@ -1984,7 +1984,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
 					break;
                 case '!':   /* EXEC Directory */
 #if defined(__linux__) && defined(USE_DOSEMU)
-					if(!native_executable(&cfg, instr, mode))
+					if(!(mode & EX_NATIVE))
 						strncat(cmd, DOSEMU_EXEC_DIR, avail);
 					else
 #endif
-- 
GitLab