[NTVDM]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Thu, 18 Jul 2013 12:31:11 +0000 (12:31 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Thu, 18 Jul 2013 12:31:11 +0000 (12:31 +0000)
Fix several bugs.

svn path=/branches/ntvdm/; revision=59502

subsystems/ntvdm/dos.c
subsystems/ntvdm/dos.h

index a9d63f7..bf0913c 100644 (file)
@@ -398,7 +398,7 @@ BOOLEAN DosFreeMemory(WORD BlockData)
     return TRUE;
 }
 
     return TRUE;
 }
 
-BOOLEAN DosLinkUmb()
+BOOLEAN DosLinkUmb(VOID)
 {
     DWORD Segment = FIRST_MCB_SEGMENT;
     PDOS_MCB Mcb = SEGMENT_TO_MCB(Segment);
 {
     DWORD Segment = FIRST_MCB_SEGMENT;
     PDOS_MCB Mcb = SEGMENT_TO_MCB(Segment);
@@ -423,7 +423,7 @@ BOOLEAN DosLinkUmb()
     return TRUE;
 }
 
     return TRUE;
 }
 
-BOOLEAN DosUnlinkUmb()
+BOOLEAN DosUnlinkUmb(VOID)
 {
     DWORD Segment = FIRST_MCB_SEGMENT;
     PDOS_MCB Mcb = SEGMENT_TO_MCB(Segment);
 {
     DWORD Segment = FIRST_MCB_SEGMENT;
     PDOS_MCB Mcb = SEGMENT_TO_MCB(Segment);
@@ -895,6 +895,7 @@ Cleanup:
 
 VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode)
 {
 
 VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode)
 {
+    WORD i;
     WORD McbSegment = FIRST_MCB_SEGMENT;
     PDOS_MCB CurrentMcb;
     LPDWORD IntVecTable = (LPDWORD)((ULONG_PTR)BaseAddress);
     WORD McbSegment = FIRST_MCB_SEGMENT;
     PDOS_MCB CurrentMcb;
     LPDWORD IntVecTable = (LPDWORD)((ULONG_PTR)BaseAddress);
@@ -903,7 +904,11 @@ VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode)
     /* Check if this PSP is it's own parent */
     if (PspBlock->ParentPsp == Psp) goto Done;
 
     /* Check if this PSP is it's own parent */
     if (PspBlock->ParentPsp == Psp) goto Done;
 
-    // TODO: Close all handles opened by the process
+    for (i = 0; i < PspBlock->HandleTableSize; i++)
+    {
+        /* Close the handle */
+        DosCloseHandle(i);
+    }
 
     /* Free the memory used by the process */
     while (TRUE)
 
     /* Free the memory used by the process */
     while (TRUE)
@@ -942,7 +947,7 @@ Done:
                     LOWORD(PspBlock->TerminateAddress));
 }
 
                     LOWORD(PspBlock->TerminateAddress));
 }
 
-CHAR DosReadCharacter()
+CHAR DosReadCharacter(VOID)
 {
     CHAR Character = '\0';
     WORD BytesRead;
 {
     CHAR Character = '\0';
     WORD BytesRead;
@@ -1539,12 +1544,12 @@ VOID DosInt21h(WORD CodeSegment)
     }
 }
 
     }
 }
 
-VOID DosBreakInterrupt()
+VOID DosBreakInterrupt(VOID)
 {
     VdmRunning = FALSE;
 }
 
 {
     VdmRunning = FALSE;
 }
 
-BOOLEAN DosInitialize()
+BOOLEAN DosInitialize(VOID)
 {
     BYTE i;
     PDOS_MCB Mcb = SEGMENT_TO_MCB(FIRST_MCB_SEGMENT);
 {
     BYTE i;
     PDOS_MCB Mcb = SEGMENT_TO_MCB(FIRST_MCB_SEGMENT);
index ad8d2d3..fb577e7 100644 (file)
@@ -19,7 +19,7 @@
 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
 #define FIRST_MCB_SEGMENT 0x1000
 #define DOS_CONFIG_PATH L"%SystemRoot%\\system32\\CONFIG.NT"
 #define DOS_COMMAND_INTERPRETER L"%SystemRoot%\\system32\\COMMAND.COM /k %SystemRoot%\\system32\\AUTOEXEC.NT"
 #define FIRST_MCB_SEGMENT 0x1000
-#define USER_MEMORY_SIZE 0x8FFF
+#define USER_MEMORY_SIZE 0x8FFE
 #define SYSTEM_PSP 0x08
 #define SYSTEM_ENV_BLOCK 0x800
 #define INVALID_DOS_HANDLE 0xFFFF
 #define SYSTEM_PSP 0x08
 #define SYSTEM_ENV_BLOCK 0x800
 #define INVALID_DOS_HANDLE 0xFFFF
@@ -103,12 +103,12 @@ WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritte
 VOID DosInitializePsp(WORD PspSegment, LPCSTR CommandLine, WORD ProgramSize, WORD Environment);
 BOOLEAN DosCreateProcess(LPCSTR CommandLine, WORD EnvBlock);
 VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode);
 VOID DosInitializePsp(WORD PspSegment, LPCSTR CommandLine, WORD ProgramSize, WORD Environment);
 BOOLEAN DosCreateProcess(LPCSTR CommandLine, WORD EnvBlock);
 VOID DosTerminateProcess(WORD Psp, BYTE ReturnCode);
-CHAR DosReadCharacter();
+CHAR DosReadCharacter(VOID);
 VOID DosPrintCharacter(CHAR Character);
 VOID DosInt20h(WORD CodeSegment);
 VOID DosInt21h(WORD CodeSegment);
 VOID DosPrintCharacter(CHAR Character);
 VOID DosInt20h(WORD CodeSegment);
 VOID DosInt21h(WORD CodeSegment);
-VOID DosBreakInterrupt();
-BOOLEAN DosInitialize();
+VOID DosBreakInterrupt(VOID);
+BOOLEAN DosInitialize(VOID);
 
 #endif
 
 
 #endif