diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 88d26590697657601bbcc7561bd0ce378d049c44..f57703edcb87f555bd0f84b2b4b4bbb2e972383a 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -850,11 +850,19 @@ enum { /* readmail and delmailidx which types */ #define EX_WILDCARD 0 #endif +/* Linux-DOSemu path/drive hackeroo */ #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:" +#define DOSEMU_NODE_DIR DOSEMU_NODE_DRIVE "\\" +#define DOSEMU_XTRN_DIR DOSEMU_XTRN_DRIVE "\\" +#define DOSEMU_CTRL_DIR DOSEMU_CTRL_DRIVE "\\" +#define DOSEMU_DATA_DIR DOSEMU_DATA_DRIVE "\\" +#define DOSEMU_EXEC_DIR DOSEMU_EXEC_DRIVE "\\" +#define DOSEMU_TEMP_DIR DOSEMU_NODE_DRIVE "\\TEMP\\" +#define DOSEMU_TEXT_DIR DOSEMU_CTRL_DRIVE "\\..\\TEXT\\" /* telnet_gate() mode bits */ #define TG_ECHO (1<<0) /* Turn on telnet echo */ diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp index 20e6fb8d8333aacba979c50e5c4980a44283a73d..75c862ee3a4254d755eb2f05edfaedc7f9e3e797 100644 --- a/src/sbbs3/xtrn.cpp +++ b/src/sbbs3/xtrn.cpp @@ -1883,10 +1883,23 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,ultoa((ulong)cur_cps*10,str,10), avail); break; case 'F': /* File path */ - strncat(cmd,QUOTED_STRING(instr[i],fpath,str,sizeof(str)), avail); +#if defined(__linux__) && defined(USE_DOSEMU) + if(mode != EX_UNSPECIFIED && !(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); + } + else +#endif + strncat(cmd,QUOTED_STRING(instr[i],fpath,str,sizeof(str)), avail); break; case 'G': /* Temp directory */ - strncat(cmd,cfg.temp_dir, avail); +#if defined(__linux__) && defined(USE_DOSEMU) + if(mode != EX_UNSPECIFIED && !(mode & EX_NATIVE)) + strncat(cmd, DOSEMU_TEMP_DIR, avail); + else +#endif + strncat(cmd,cfg.temp_dir, avail); break; case 'H': /* Socket Handle */ strncat(cmd,ultoa(client_socket_dup,str,10), avail); @@ -1897,7 +1910,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch case 'J': #if defined(__linux__) && defined(USE_DOSEMU) if(mode != EX_UNSPECIFIED && !(mode & EX_NATIVE)) - strncat(cmd, DOSEMU_DATA_DRIVE "\\", avail); + strncat(cmd, DOSEMU_DATA_DIR, avail); else #endif strncat(cmd,cfg.data_dir, avail); @@ -1905,7 +1918,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch case 'K': #if defined(__linux__) && defined(USE_DOSEMU) if(mode != EX_UNSPECIFIED && !(mode & EX_NATIVE)) - strncat(cmd, DOSEMU_CTRL_DRIVE "\\", avail); + strncat(cmd, DOSEMU_CTRL_DIR, avail); else #endif strncat(cmd,cfg.ctrl_dir, avail); @@ -1919,7 +1932,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch case 'N': /* Node Directory (same as SBBSNODE environment var) */ #if defined(__linux__) && defined(USE_DOSEMU) if(mode != EX_UNSPECIFIED && !(mode & EX_NATIVE)) - strncat(cmd, DOSEMU_NODE_DRIVE "\\", avail); + strncat(cmd, DOSEMU_NODE_DIR, avail); else #endif strncat(cmd,cfg.node_dir, avail); @@ -1962,7 +1975,12 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch strncat(cmd,comspec, avail); break; case 'Z': - strncat(cmd,cfg.text_dir, avail); +#if defined(__linux__) && defined(USE_DOSEMU) + if(mode != EX_UNSPECIFIED && !(mode & EX_NATIVE)) + strncat(cmd, DOSEMU_TEXT_DIR, avail); + else +#endif + strncat(cmd,cfg.text_dir, avail); break; case '~': /* DOS-compatible (8.3) filename */ #ifdef _WIN32 @@ -1977,7 +1995,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch case '!': /* EXEC Directory */ #if defined(__linux__) && defined(USE_DOSEMU) if(mode != EX_UNSPECIFIED && !(mode & EX_NATIVE)) - strncat(cmd, DOSEMU_EXEC_DRIVE "\\", avail); + strncat(cmd, DOSEMU_EXEC_DIR, avail); else #endif strncat(cmd,cfg.exec_dir, avail); diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index 6389d61bac73b0e753c064cb1657bcf26c34fcd6..c1a83d36eac21fee11e68f4a02f9e84b78a0553b 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -193,10 +193,12 @@ 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, DOSEMU_NODE_DRIVE); - SAFECOPY(ctrl_dir, DOSEMU_CTRL_DRIVE); - SAFECOPY(data_dir, DOSEMU_DATA_DRIVE); - SAFECOPY(exec_dir, DOSEMU_EXEC_DRIVE); + SAFECOPY(node_dir, DOSEMU_NODE_DIR); + SAFECOPY(ctrl_dir, DOSEMU_CTRL_DIR); + SAFECOPY(data_dir, DOSEMU_DATA_DIR); + SAFECOPY(exec_dir, DOSEMU_EXEC_DIR); + SAFECOPY(text_dir, DOSEMU_TEXT_DIR); + SAFECOPY(temp_dir, DOSEMU_TEMP_DIR); #endif }