diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 7c4a2b4e4472cd16e154773513446e786580c9ae..45fdbca9b9e1be4d620b16a0ba4fbf448add528c 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 9c8b6dee3cd574deb3d865016d92b508396a6f6f..2f3bf34b3c2caf68850afb5bf425239f27a6a94a 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 9f74380983e6b649176e7f39b350547f059ee2d0..859cba0ba7d3234faebf61bb8ab0bf4b07f3eaa4 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 */