diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index c5bfa0a9..2e0e5a79 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -66,6 +66,7 @@ bool DOS_MakeName(char const * const name,char * const fullname,Bit8u * drive) { char tempdir[DOS_PATHLENGTH]; char upname[DOS_PATHLENGTH]; Bitu r,w; + Bit8u c; *drive = DOS_GetDefaultDrive(); /* First get the drive */ if (name_int[1]==':') { @@ -78,28 +79,11 @@ bool DOS_MakeName(char const * const name,char * const fullname,Bit8u * drive) { } r=0;w=0; while (name_int[r]!=0 && (r='a') && (c<='z')) {upname[w++]=c-32;continue;} - if ((c>='A') && (c<='Z')) {upname[w++]=c;continue;} - if ((c>='0') && (c<='9')) {upname[w++]=c;continue;} - switch (c) { - case '/': - upname[w++]='\\'; - break; - case ' ': /* should be seperator */ - break; - case '\\': case '$': case '#': case '@': case '(': case ')': - case '!': case '%': case '{': case '}': case '`': case '~': - case '_': case '-': case '.': case '*': case '?': case '&': - case '\'': case '+': case '^': case 246: case 255: case 0xa0: - case 0xe5: case 0xbd: case 0x9d: - upname[w++]=c; - break; - default: - LOG(LOG_FILES,LOG_NORMAL)("Makename encountered an illegal char %c hex:%X in %s!",c,c,name); - DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; - break; - } + c=name_int[r++]; + if ((c>='a') && (c<='z')) c-=32; + else if (c==' ') continue; /* should be separator */ + else if (c=='/') c='\\'; + upname[w++]=c; } while (r>0 && name_int[r-1]==' ') r--; if (r>=DOS_PATHLENGTH) { DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; } @@ -176,6 +160,24 @@ bool DOS_MakeName(char const * const name,char * const fullname,Bit8u * drive) { if((strlen(tempdir) - strlen(ext)) > 8) memmove(tempdir + 8, ext, 5); } else tempdir[8]=0; + for (Bitu i=0;i='A') && (c<='Z')) continue; + if ((c>='0') && (c<='9')) continue; + switch (c) { + case '$': case '#': case '@': case '(': case ')': + case '!': case '%': case '{': case '}': case '`': case '~': + case '_': case '-': case '.': case '*': case '?': case '&': + case '\'': case '+': case '^': case 246: case 255: case 0xa0: + case 0xe5: case 0xbd: case 0x9d: + break; + default: + LOG(LOG_FILES,LOG_NORMAL)("Makename encountered an illegal char %c hex:%X in %s!",c,c,name); + DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; + break; + } + } + if (strlen(fullname)+strlen(tempdir)>=DOS_PATHLENGTH) { DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; } diff --git a/src/dos/dos_memory.cpp b/src/dos/dos_memory.cpp index 7ab32bdb..f59870fe 100644 --- a/src/dos/dos_memory.cpp +++ b/src/dos/dos_memory.cpp @@ -227,12 +227,12 @@ bool DOS_ResizeMemory(Bit16u segment,Bit16u * blocks) { return false; } + DOS_CompressMemory(); Bit16u total=mcb.GetSize(); DOS_MCB mcb_next(segment+total); if (*blocks<=total) { if (GCC_UNLIKELY(*blocks==total)) { /* Nothing to do */ - DOS_CompressMemory(); return true; } /* Shrinking MCB */ @@ -268,7 +268,6 @@ bool DOS_ResizeMemory(Bit16u segment,Bit16u * blocks) { mcb_next.SetPSPSeg(MCB_FREE); mcb.SetType(0x4d); mcb.SetPSPSeg(dos.psp()); - DOS_CompressMemory(); return true; } @@ -281,7 +280,6 @@ bool DOS_ResizeMemory(Bit16u segment,Bit16u * blocks) { } mcb.SetSize(total); mcb.SetPSPSeg(dos.psp()); - DOS_CompressMemory(); if (*blocks==total) return true; /* block fit exactly */ *blocks=total; /* return maximum */