From f8a99f6c46b58971b41479a8d091a082e6fc19be Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Tue, 24 Nov 2020 19:34:32 -0800 Subject: [PATCH] Simplify Linux-DOSEMU door setup Allows %f (drop file) and %s (startup-directory) to be specified on the external program's command-line and expand to the paths that DOSEMU will understand. No more hard-coding "D:\" or "E:\" and the drop filename on the command-line required. Also (for all builds), include the door's startup directory for %s specifier on the clean-up command-line. This just seems like an oversight. --- src/sbbs3/sbbsdefs.h | 6 ++++++ src/sbbs3/xtrn.cpp | 10 +++++----- src/sbbs3/xtrn_sec.cpp | 32 ++++++++++++++++++++++++-------- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 7c4a2b4e44..45fdbca9b9 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -849,6 +849,12 @@ enum { /* readmail and delmailidx which types */ #define EX_WILDCARD 0 #endif +#define DOSEMU_NODE_DRIVE "D:" +#define DOSEMU_XTRN_DRIVE "E:" // Parent of xtrn's startup-dir +#define DOSEMU_CTRL_DRIVE "F:" +#define DOSEMU_DATA_DRIVE "G:" +#define DOSEMU_EXEC_DRIVE "H:" + /* telnet_gate() mode bits */ #define TG_ECHO (1<<0) /* Turn on telnet echo */ #define TG_CRLF (1<<1) /* Expand sole CR to CRLF */ diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp index 9c8b6dee3c..2f3bf34b3c 100644 --- a/src/sbbs3/xtrn.cpp +++ b/src/sbbs3/xtrn.cpp @@ -1216,11 +1216,11 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) /* Default locations that can be overridden by * the sysop in emusetup.bat */ - const char nodedrive[] = "D:"; - const char xtrndrive[] = "E:"; - const char ctrldrive[] = "F:"; - const char datadrive[] = "G:"; - const char execdrive[] = "H:"; + const char nodedrive[] = DOSEMU_NODE_DRIVE; + const char xtrndrive[] = DOSEMU_XTRN_DRIVE; + const char ctrldrive[] = DOSEMU_CTRL_DRIVE; + const char datadrive[] = DOSEMU_DATA_DRIVE; + const char execdrive[] = DOSEMU_EXEC_DRIVE; SAFECOPY(str,startup_dir); if(*(p=lastchar(str))=='/') /* kill trailing slash */ diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index 9f74380983..859cba0ba7 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -193,10 +193,10 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl GetShortPathName(cfg.temp_dir,temp_dir,sizeof(temp_dir)); #elif defined(__linux__) && defined(USE_DOSEMU) /* These drive mappings must match the Linux/DOSEMU patch in xtrn.cpp: */ - SAFECOPY(node_dir, "D:"); - SAFECOPY(ctrl_dir, "F:"); - SAFECOPY(data_dir, "G:"); - SAFECOPY(exec_dir, "H:"); + SAFECOPY(node_dir, DOSEMU_NODE_DRIVE); + SAFECOPY(ctrl_dir, DOSEMU_CTRL_DRIVE); + SAFECOPY(data_dir, DOSEMU_DATA_DRIVE); + SAFECOPY(exec_dir, DOSEMU_EXEC_DRIVE); #endif } @@ -1606,17 +1606,33 @@ bool sbbs_t::exec_xtrn(uint xtrnnum) removecase(str); /* reason it's there */ } + char drop_file[MAX_PATH + 1]; + char startup_dir[MAX_PATH + 1]; +#if defined(__linux__) && defined(USE_DOSEMU) + if(!(cfg.xtrn[xtrnnum]->misc & XTRN_NATIVE)) { + SAFEPRINTF(startup_dir, "%s\\%s", DOSEMU_XTRN_DRIVE, getdirname(cfg.xtrn[xtrnnum]->path)); + backslash(startup_dir); + if(cfg.xtrn[xtrnnum]->misc & STARTUPDIR) + SAFEPRINTF(drop_file, "%s%s", startup_dir, getfname(path)); + else + SAFEPRINTF(drop_file, "%s\\%s", DOSEMU_NODE_DRIVE, getfname(path)); + } + else +#endif + { + SAFECOPY(startup_dir, cfg.xtrn[xtrnnum]->path); + SAFECOPY(drop_file, path); + } + start=time(NULL); - external(cmdstr(cfg.xtrn[xtrnnum]->cmd,path - ,cfg.xtrn[xtrnnum]->path - ,NULL) + external(cmdstr(cfg.xtrn[xtrnnum]->cmd, drop_file, startup_dir, NULL) ,mode ,cfg.xtrn[xtrnnum]->path); end=time(NULL); if(cfg.xtrn[xtrnnum]->misc&FREETIME) starttime+=end-start; if(cfg.xtrn[xtrnnum]->clean[0]) { - external(cmdstr(cfg.xtrn[xtrnnum]->clean,path,nulstr,NULL) + external(cmdstr(cfg.xtrn[xtrnnum]->clean, drop_file, startup_dir, NULL) ,mode&~(EX_STDIN|EX_CONIO), cfg.xtrn[xtrnnum]->path); } /* Re-open the logfile */ -- GitLab