Changeset 1687 for trunk/src


Ignore:
Timestamp:
Nov 10, 1999, 3:16:01 PM (26 years ago)
Author:
sandervl
Message:

VirtualAlloc fixes & changes

Location:
trunk/src/kernel32
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/mmap.cpp

    r1641 r1687  
    1 /* $Id: mmap.cpp,v 1.21 1999-11-08 20:53:24 sandervl Exp $ */
     1/* $Id: mmap.cpp,v 1.22 1999-11-10 14:16:01 sandervl Exp $ */
    22
    33/*
     
    145145//(all pages are readonly until the app tries to write to it)
    146146//******************************************************************************
    147 BOOL Win32MemMap::commitPage(ULONG offset, BOOL fWriteAccess)
     147BOOL Win32MemMap::commitPage(ULONG offset, BOOL fWriteAccess, int nrpages)
    148148{
    149149 MEMORY_BASIC_INFORMATION memInfo;
     
    158158  dprintf(("Win32MemMap::commitPage %x (faultaddr %x)", pageAddr, lpPageFaultAddr));
    159159  if(hMemFile != -1) {
    160         if(VirtualQuery((LPSTR)pageAddr, &memInfo, NRPAGES_TOCOMMIT*PAGE_SIZE) == 0) {
    161                 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, NRPAGES_TOCOMMIT*PAGE_SIZE));
     160        if(VirtualQuery((LPSTR)pageAddr, &memInfo, nrpages*PAGE_SIZE) == 0) {
     161                dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, nrpages*PAGE_SIZE));
    162162                goto fail;
    163163        }
     
    207207  }
    208208  else {
    209         if(VirtualQuery((LPSTR)pageAddr, &memInfo, NRPAGES_TOCOMMIT*PAGE_SIZE) == 0) {
    210                 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, NRPAGES_TOCOMMIT*PAGE_SIZE));
     209        if(VirtualQuery((LPSTR)pageAddr, &memInfo, nrpages*PAGE_SIZE) == 0) {
     210                dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, nrpages*PAGE_SIZE));
    211211                goto fail;
    212212        }
  • trunk/src/kernel32/mmap.h

    r1432 r1687  
    1 /* $Id: mmap.h,v 1.10 1999-10-24 22:51:22 sandervl Exp $ */
     1/* $Id: mmap.h,v 1.11 1999-11-10 14:16:01 sandervl Exp $ */
    22
    33/*
     
    5151   void   Release()                      { if(--referenced == 0) delete this; };
    5252
    53    BOOL   commitPage(ULONG offset, BOOL fWriteAccess);
     53   BOOL   commitPage(ULONG offset, BOOL fWriteAccess, int nrpages = NRPAGES_TOCOMMIT);
    5454
    5555static Win32MemMap *findMap(LPSTR lpszName);
  • trunk/src/kernel32/oslibdos.cpp

    r1628 r1687  
    1 /* $Id: oslibdos.cpp,v 1.6 1999-11-08 13:43:12 sandervl Exp $ */
     1/* $Id: oslibdos.cpp,v 1.7 1999-11-10 14:16:01 sandervl Exp $ */
    22
    33/*
     
    3232}
    3333//******************************************************************************
     34//NT returns addresses aligned at 64k, so we do too.
    3435//******************************************************************************
    3536DWORD OSLibDosAllocMem(LPVOID *lplpMemAddr, DWORD size, DWORD flags)
    3637{
    37   return DosAllocMem(lplpMemAddr, size, flags | flAllocMem);
     38 LPVOID memaddr;
     39 DWORD  offset;
     40 APIRET rc;
     41
     42  rc = DosAllocMem(&memaddr, size, PAG_READ | flAllocMem);
     43  if(rc) {
     44        return rc;
     45  }
     46  DosEnterCritSec();
     47  DosFreeMem(memaddr);
     48  offset = (DWORD)memaddr & 0xFFFF;
     49  if(offset) {
     50        DosAllocMem(&memaddr, 64*1024 - offset, PAG_READ | flAllocMem);
     51  }
     52  rc = DosAllocMem(lplpMemAddr, size, flags | flAllocMem);
     53  DosExitCritSec();
     54  if((DWORD)*lplpMemAddr & 0xFFFF) {//still not at 64k boundary?
     55        DosFreeMem(*lplpMemAddr);
     56        rc = OSLibDosAllocMem(lplpMemAddr, size, flags);
     57  }
     58  if(offset) {
     59        DosFreeMem(memaddr);
     60  }
     61
     62  return rc;
    3863}
    3964//******************************************************************************
  • trunk/src/kernel32/virtual.cpp

    r1432 r1687  
    1 /* $Id: virtual.cpp,v 1.21 1999-10-24 22:51:22 sandervl Exp $ */
     1/* $Id: virtual.cpp,v 1.22 1999-11-10 14:16:01 sandervl Exp $ */
    22
    33/*
     
    3131ODINDEBUGCHANNEL(KERNEL32-VIRTUAL)
    3232
     33#define PAGE_SHIFT 12
    3334
    3435/***********************************************************************
     
    305306    dprintf(("VirtualAlloc: Unknown protection flags, default to read/write"));
    306307    flag |= PAG_READ | PAG_WRITE;
     308  }
     309
     310  if(lpvAddress)
     311  {
     312   Win32MemMap *map;
     313   ULONG offset, nrpages;
     314
     315        nrpages = cbSize >> PAGE_SHIFT;
     316        if(cbSize & 0xFFF)
     317                nrpages++;
     318
     319        map = Win32MemMapView::findMapByView((ULONG)lpvAddress, &offset, fdwProtect);
     320        if(map) {
     321                //TODO: We don't allow protection flag changes for mmaped files now
     322                map->commitPage(offset, FALSE, nrpages);
     323                return lpvAddress;
     324        }
    307325  }
    308326
  • trunk/src/kernel32/wprocess.cpp

    r1670 r1687  
    1 /* $Id: wprocess.cpp,v 1.46 1999-11-09 19:22:33 sandervl Exp $ */
     1/* $Id: wprocess.cpp,v 1.47 1999-11-10 14:16:01 sandervl Exp $ */
    22
    33/*
     
    699699  }
    700700  proc = O32_GetProcAddress(hModule, lpszProc);
    701   dprintf(("KERNEL32:  GetProcAddress %s from %X returned %X\n", lpszProc, hModule, proc));
     701  if(HIWORD(lpszProc))
     702        dprintf(("KERNEL32:  GetProcAddress %s from %X returned %X\n", lpszProc, hModule, proc));
     703  else  dprintf(("KERNEL32:  GetProcAddress %x from %X returned %X\n", lpszProc, hModule, proc));
    702704  return(proc);
    703705}
Note: See TracChangeset for help on using the changeset viewer.