[NTVDM]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 24 Apr 2015 23:47:54 +0000 (23:47 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 24 Apr 2015 23:47:54 +0000 (23:47 +0000)
Fix INT 21h, AH = 29h: stop at the first non-printable character, make
all the characters uppercase in the FCB.

svn path=/trunk/; revision=67387

reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c

index b2b9306..6fdac89 100644 (file)
@@ -1794,7 +1794,7 @@ VOID WINAPI DosInt21h(LPWORD Stack)
 
             /* Parse the file name */
             i = 0;
 
             /* Parse the file name */
             i = 0;
-            while (*FileName && (i < 8))
+            while ((*FileName >= 0x20) && (i < 8))
             {
                 if (*FileName == '.') break;
                 else if (*FileName == '*')
             {
                 if (*FileName == '.') break;
                 else if (*FileName == '*')
@@ -1803,7 +1803,7 @@ VOID WINAPI DosInt21h(LPWORD Stack)
                     break;
                 }
 
                     break;
                 }
 
-                Fcb->FileName[i++] = *FileName++;
+                Fcb->FileName[i++] = RtlUpperChar(*FileName++);
             }
 
             /* Fill the whole field with blanks only if bit 2 is not set */
             }
 
             /* Fill the whole field with blanks only if bit 2 is not set */
@@ -1813,14 +1813,14 @@ VOID WINAPI DosInt21h(LPWORD Stack)
             }
 
             /* Skip to the extension part */
             }
 
             /* Skip to the extension part */
-            while (*FileName && *FileName != '.') FileName++;
+            while (*FileName >= 0x20 && *FileName != '.') FileName++;
             if (*FileName == '.') FileName++;
 
             /* Now parse the extension */
             i = 0;
             FillChar = ' ';
 
             if (*FileName == '.') FileName++;
 
             /* Now parse the extension */
             i = 0;
             FillChar = ' ';
 
-            while (*FileName && (i < 3))
+            while ((*FileName >= 0x20) && (i < 3))
             {
                 if (*FileName == '*')
                 {
             {
                 if (*FileName == '*')
                 {
@@ -1828,7 +1828,7 @@ VOID WINAPI DosInt21h(LPWORD Stack)
                     break;
                 }
 
                     break;
                 }
 
-                Fcb->FileExt[i++] = *FileName++;
+                Fcb->FileExt[i++] = RtlUpperChar(*FileName++);
             }
 
             /* Fill the whole field with blanks only if bit 3 is not set */
             }
 
             /* Fill the whole field with blanks only if bit 3 is not set */