Ensure that we can initialize the DOS memory area correctly even if it
has been pre-reserved already.

diff --git a/dlls/kernel/dosmem.c b/dlls/kernel/dosmem.c
index f2546de..10f8861 100644
--- a/dlls/kernel/dosmem.c
+++ b/dlls/kernel/dosmem.c
@@ -308,17 +308,20 @@
 {
     int sys_offset = 0;
     int page_size = getpagesize();
-    void *addr = wine_anon_mmap( (void *)page_size, 0x110000-page_size,
-                                 PROT_READ | PROT_WRITE | PROT_EXEC, 0 );
-    if (addr == (void *)page_size)  /* we got what we wanted */
+    void *addr = NULL;
+
+    if (wine_mmap_is_in_reserved_area( NULL, 0x110000 ) != 1)
+    {
+        addr = wine_anon_mmap( (void *)page_size, 0x110000-page_size,
+                               PROT_READ | PROT_WRITE | PROT_EXEC, 0 );
+        if (addr == (void *)page_size) addr = NULL; /* we got what we wanted */
+        else munmap( addr, 0x110000 - page_size );
+    }
+
+    if (!addr)
     {
         /* now map from address 0 */
-        addr = wine_anon_mmap( NULL, 0x110000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED );
-        if (addr)
-        {
-            ERR("MAP_FIXED failed at address 0 for DOS address space\n" );
-            ExitProcess(1);
-        }
+        wine_anon_mmap( NULL, 0x110000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED );
 
         /* inform the memory manager that there is a mapping here */
         VirtualAlloc( addr, 0x110000, MEM_RESERVE | MEM_SYSTEM, PAGE_EXECUTE_READWRITE );