diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp index a20aba19baff500c8196120355c0df845e3302ec..b7d19000683f1121e6ea3079d1ebda97e7bbef5c 100644 --- a/src/sbbs3/xtrn.cpp +++ b/src/sbbs3/xtrn.cpp @@ -492,11 +492,28 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) } else { // DOS external + // DOS-compatible (short) paths + char node_dir[MAX_PATH+1]; + char ctrl_dir[MAX_PATH+1]; + char data_dir[MAX_PATH+1]; + char exec_dir[MAX_PATH+1]; + + // in case GetShortPathName fails + SAFECOPY(node_dir,cfg.node_dir); + SAFECOPY(ctrl_dir,cfg.ctrl_dir); + SAFECOPY(data_dir,cfg.data_dir); + SAFECOPY(exec_dir,cfg.exec_dir); + + GetShortPathName(cfg.node_dir,node_dir,sizeof(node_dir)); + GetShortPathName(cfg.ctrl_dir,ctrl_dir,sizeof(node_dir)); + GetShortPathName(cfg.data_dir,data_dir,sizeof(data_dir)); + GetShortPathName(cfg.exec_dir,exec_dir,sizeof(exec_dir)); + sprintf(path,"%sDOSXTRN.RET", cfg.node_dir); remove(path); // Create temporary environment file - sprintf(path,"%sDOSXTRN.ENV", cfg.node_dir); + sprintf(path,"%sDOSXTRN.ENV", node_dir); FILE* fp=fopen(path,"w"); if(fp==NULL) { XTRN_CLEANUP; @@ -504,11 +521,11 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) return(errno); } fprintf(fp, "%s\n", fullcmdline); - fprintf(fp, "DSZLOG=%sPROTOCOL.LOG\n", cfg.node_dir); - fprintf(fp, "SBBSNODE=%s\n", cfg.node_dir); - fprintf(fp, "SBBSCTRL=%s\n", cfg.ctrl_dir); - fprintf(fp, "SBBSDATA=%s\n", cfg.data_dir); - fprintf(fp, "SBBSEXEC=%s\n", cfg.exec_dir); + fprintf(fp, "DSZLOG=%sPROTOCOL.LOG\n", node_dir); + fprintf(fp, "SBBSNODE=%s\n", node_dir); + fprintf(fp, "SBBSCTRL=%s\n", ctrl_dir); + fprintf(fp, "SBBSDATA=%s\n", data_dir); + fprintf(fp, "SBBSEXEC=%s\n", exec_dir); fprintf(fp, "SBBSNNUM=%d\n", cfg.node_num); /* date/time env vars */ fprintf(fp, "DAY=%02u\n", tm.tm_mday); @@ -518,9 +535,7 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) fprintf(fp, "YEAR=%u\n",1900+tm.tm_year); fclose(fp); - SAFECOPY(str,path); // incase GetShortPathName fails - GetShortPathName(path,str,sizeof(str)); - sprintf(fullcmdline, "%sDOSXTRN.EXE %s", cfg.exec_dir, str); + sprintf(fullcmdline, "%sDOSXTRN.EXE %s", cfg.exec_dir, path); if(!(mode&EX_OFFLINE) && nt) { // Windows NT/2000 i=SBBSEXEC_MODE_FOSSIL;