Ignore:
Timestamp:
Aug 24, 1999, 8:48:10 PM (26 years ago)
Author:
sandervl
Message:

Memory mapped file changes

File:
1 edited

Legend:

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

    r657 r664  
    1 /* $Id: mmap.cpp,v 1.7 1999-08-24 12:23:54 sandervl Exp $ */
     1/* $Id: mmap.cpp,v 1.8 1999-08-24 18:46:40 sandervl Exp $ */
    22
    33/*
     
    3636//******************************************************************************
    3737Win32MemMap::Win32MemMap(HFILE hfile, ULONG size, ULONG fdwProtect, LPSTR lpszName)
    38                : fMapped(FALSE), pMapping(NULL), mMapAccess(0)
     38               : fMapped(FALSE), pMapping(NULL), mMapAccess(0), referenced(0)
    3939{
    4040  globalmapMutex.enter();
     
    5656//******************************************************************************
    5757//******************************************************************************
    58 HANDLE Win32MemMap::Init()
     58BOOL Win32MemMap::Init(HANDLE hMemMap)
    5959{
    6060  mapMutex.enter();
     
    6868        }
    6969  }
    70   if(HMHandleAllocate(&hMemMap, (ULONG)this) != 0)
    71   {
    72         dprintf(("Win32MemMap::Init HMHandleAllocate failed!!"));
    73         DebugInt3();
    74         goto fail;
    75   }
    76   mapMutex.leave();
    77   return hMemMap;
     70  this->hMemMap = hMemMap;
     71  mapMutex.leave();
     72  return TRUE;
    7873fail:
    7974  mapMutex.leave();
    80   return 0;
     75  return FALSE;
    8176}
    8277//******************************************************************************
     
    8479Win32MemMap::~Win32MemMap()
    8580{
    86   unmapFileView();
     81  unmapViewOfFile();
    8782  if(lpszMapName) {
    8883        free(lpszMapName);
     
    120115//******************************************************************************
    121116//******************************************************************************
    122 BOOL Win32MemMap::unmapFileView()
     117BOOL Win32MemMap::unmapViewOfFile()
    123118{
    124119  if(fMapped == FALSE)
     
    137132//******************************************************************************
    138133//******************************************************************************
    139 LPVOID Win32MemMap::mapFileView(ULONG size, ULONG offset, ULONG fdwAccess)
     134LPVOID Win32MemMap::mapViewOfFile(ULONG size, ULONG offset, ULONG fdwAccess)
    140135{
    141136  mapMutex.enter();
    142137  ULONG memFlags = (mProtFlags & (PAGE_READONLY | PAGE_READWRITE | PAGE_WRITECOPY));
    143138  ULONG fAlloc   = 0;
    144 
    145   if(fdwAccess & FILE_MAP_WRITE && mProtFlags & (PAGE_READONLY|PAGE_WRITECOPY))
    146         goto parmfail;
    147   if(fdwAccess & FILE_MAP_READ && mProtFlags & PAGE_WRITECOPY)
    148         goto parmfail;
    149   if(fdwAccess & FILE_MAP_ALL_ACCESS && mProtFlags & (PAGE_READONLY|PAGE_WRITECOPY))
    150         goto parmfail;
    151   if(fdwAccess & FILE_MAP_COPY && mProtFlags & PAGE_WRITECOPY)
     139  LPVOID mapview;
     140
     141  if(fdwAccess & (FILE_MAP_WRITE|FILE_MAP_ALL_ACCESS) && !(mProtFlags & PAGE_READWRITE))
     142        goto parmfail;
     143  if(fdwAccess & FILE_MAP_READ && !(mProtFlags & (PAGE_READWRITE|PAGE_READONLY)))
     144        goto parmfail;
     145  if(fdwAccess & FILE_MAP_COPY && !(mProtFlags & PAGE_WRITECOPY))
    152146        goto parmfail;
    153147 
     
    157151        fAlloc |= MEM_RESERVE;
    158152
    159   pMapping = VirtualAlloc(0, mSize, fAlloc, memFlags);
    160   if(pMapping == NULL) {
    161         dprintf(("Win32MemMap::mapFileView: VirtualAlloc %x %x %x failed!", mSize, fAlloc, memFlags));
    162         goto fail;
    163   }
    164   mapMutex.leave();
    165   return pMapping;
     153  if(fMapped == FALSE) {//if not mapped, reserve/commit entire view
     154        pMapping = VirtualAlloc(0, mSize, fAlloc, mProtFlags);
     155        if(pMapping == NULL) {
     156                dprintf(("Win32MemMap::mapFileView: VirtualAlloc %x %x %x failed!", mSize, fAlloc, memFlags));
     157                goto fail;
     158        }
     159        fMapped = TRUE;
     160  }
     161  mapview = (LPVOID)((ULONG)pMapping + offset);
     162  mapMutex.leave();
     163  return mapview;
    166164
    167165parmfail:
Note: See TracChangeset for help on using the changeset viewer.