Ensure that we can initialize the DOS memory area correctly even if it

has been pre-reserved already.
This commit is contained in:
Alexandre Julliard 2004-05-28 03:45:47 +00:00
parent 5ae62e3d7a
commit f974c8598e
1 changed files with 12 additions and 9 deletions

View File

@ -308,17 +308,20 @@ static void setup_dos_mem( int dos_init )
{
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 );