diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index 42a0c08e..42b64502 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -151,13 +151,7 @@ bool DOS_GetCurrentDir(Bit8u drive,char * buffer) { } bool DOS_ChangeDir(char * dir) { - - // Be sure its not a file (Eye of the beholder 3) - char* str; - if (str=strchr(dir,'.')) { - if (isalpha(str[1]) || isdigit(str[1])) return false; - }; - + Bit8u drive;char fulldir[DOS_PATHLENGTH]; if (!DOS_MakeName(dir,fulldir,&drive)) return false; diff --git a/src/dos/drive_local.cpp b/src/dos/drive_local.cpp index 28bf7c12..7e79cd2e 100644 --- a/src/dos/drive_local.cpp +++ b/src/dos/drive_local.cpp @@ -188,6 +188,14 @@ bool localDrive::TestDir(char * dir) { strcpy(newdir,basedir); strcat(newdir,dir); CROSS_FILENAME(newdir); + // Skip directory test, if "\" + Bit16u len = strlen(newdir); + if ((len>0) && (newdir[len-1]!='\\')) { + // It has to be a directory ! + struct stat test; + if (stat(newdir,&test)==-1) return false; + if ((test.st_mode & S_IFDIR)==0) return false; + }; int temp=access(newdir,F_OK); return (temp==0); }