[NTVDM]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 4 Oct 2013 21:16:58 +0000 (21:16 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 4 Oct 2013 21:16:58 +0000 (21:16 +0000)
Properly handle the case when the console framebuffer could not be created.

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

subsystems/ntvdm/vga.c

index ab2772f..d4616a7 100644 (file)
@@ -488,12 +488,22 @@ static VOID VgaChangeMode(VOID)
     if (!(VgaGcRegisters[VGA_GC_MISC_REG] & VGA_GC_MISC_NOALPHA))
     {
         /* Enter new text mode */
-        if (!VgaEnterTextMode(&Resolution)) return;
+        if (!VgaEnterTextMode(&Resolution))
+        {
+            DisplayMessage(L"An unexpected VGA error occurred while switching into text mode.");
+            VdmRunning = FALSE;
+            return;
+        }
     }
     else
     {
         /* Enter 8-bit graphics mode */
-        if (!VgaEnterGraphicsMode(&Resolution)) return;
+        if (!VgaEnterGraphicsMode(&Resolution))
+        {
+            DisplayMessage(L"An unexpected VGA error occurred while switching into graphics mode.");
+            VdmRunning = FALSE;
+            return;
+        }
     }
 
     /* Trigger a full update of the screen */
@@ -516,6 +526,12 @@ static VOID VgaUpdateFramebuffer(VOID)
                     + VgaCrtcRegisters[VGA_CRTC_START_ADDR_LOW_REG];
     DWORD ScanlineSize = (DWORD)VgaCrtcRegisters[VGA_CRTC_OFFSET_REG] * 2;
 
+    /*
+     * If console framebuffer is NULL, that means something went wrong
+     * earlier and this is the final display refresh.
+     */
+    if (ConsoleFramebuffer == NULL) return;
+
     /* Check if this is text mode or graphics mode */
     if (VgaGcRegisters[VGA_GC_MISC_REG] & VGA_GC_MISC_NOALPHA)
     {