From dcc4b13d0b29afb0cdf63168e58fdf765f2ab649 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Mon, 30 Nov 2020 17:09:21 -0800 Subject: [PATCH] A second pass at: Better native vs. DOS cmd-line detection in cmdstr() cmdstr() is often called for non-executable command-lines (e.g. for @include: file name/path arguments), so don't default to native unless a mode value was specified. Hopefully addresses issue reported by bobrob without breaking anything else (again). --- src/sbbs3/xtrn.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp index fb31c73df4..10dca2e685 100644 --- a/src/sbbs3/xtrn.cpp +++ b/src/sbbs3/xtrn.cpp @@ -226,7 +226,10 @@ static bool native_executable(scfg_t* cfg, const char* cmdline, long mode) unsigned i; if(mode&EX_NATIVE) - return(TRUE); + return true; + + if(*cmdline == '?' || *cmdline == '*') + return true; SAFECOPY(str,cmdline); /* Set str to program name only */ truncstr(str," "); @@ -1838,9 +1841,7 @@ 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; + bool native = (mode == EX_UNSPECIFIED) || native_executable(&cfg, instr, mode); if(outstr==NULL) cmd=cmdstr_output; @@ -1874,8 +1875,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(!(mode & EX_NATIVE) - && strncmp(fpath, cfg.node_dir, strlen(cfg.node_dir)) == 0) { + if(!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(!(mode & EX_NATIVE)) + if(!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(!(mode & EX_NATIVE)) + if(!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(!(mode & EX_NATIVE)) + if(!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(!(mode & EX_NATIVE)) + if(!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(!(mode & EX_NATIVE)) + if(!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(!(mode & EX_NATIVE)) + if(!native) strncat(cmd, DOSEMU_EXEC_DIR, avail); else #endif -- GitLab