Ignore:
Timestamp:
Mar 6, 2003, 11:44:34 AM (22 years ago)
Author:
sandervl
Message:

cleanup/resync

File:
1 edited

Legend:

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

    r9824 r9911  
    1 /* $Id: hmfile.cpp,v 1.40 2003-02-18 18:48:54 sandervl Exp $ */
     1/* $Id: hmfile.cpp,v 1.41 2003-03-06 10:44:33 sandervl Exp $ */
    22
    33/*
     
    527527  if(map) {
    528528       lpRealBuf = (LPVOID)((ULONG)map->getMappingAddr() + offset);
    529        DWORD nrpages = nNumberOfBytesToRead/4096;
    530        if(offset & 0xfff)
     529       DWORD nrpages = (nNumberOfBytesToRead+offset)/4096;
     530       if((nNumberOfBytesToRead+offset) & 0xfff)
    531531           nrpages++;
    532        if(nNumberOfBytesToRead & 0xfff)
    533            nrpages++;
    534 
    535        map->commitPage(offset & ~0xfff, TRUE, nrpages);
     532
     533       map->commitRange((ULONG)lpBuffer, offset & ~0xfff, TRUE, nrpages);
    536534       map->Release();
    537535  }
    538536  else lpRealBuf = (LPVOID)lpBuffer;
     537
     538  //If this file is also used in a memory map somewhere, then we need
     539  //to tell the map to flush all modified contents to disk right NOW
     540  map = Win32MemMap::findMapByFile(pHMHandleData->hWin32Handle);
     541  if(map) {
     542      DWORD curpos = SetFilePointer(pHMHandleData, 0, NULL, FILE_CURRENT);
     543
     544      dprintf(("Flush memory maps to disk before reading!!"));
     545      map->flushView(MMAP_FLUSHVIEW_ALL, curpos, nNumberOfBytesToRead);
     546  }
    539547
    540548  if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) {
     
    615623  if(map) {
    616624       lpRealBuf = (LPVOID)((ULONG)map->getMappingAddr() + offset);
    617        DWORD nrpages = nNumberOfBytesToWrite/4096;
    618        if(offset & 0xfff)
    619            nrpages++;
    620        if(nNumberOfBytesToWrite & 0xfff)
     625       DWORD nrpages = (nNumberOfBytesToWrite+offset)/4096;
     626       if((nNumberOfBytesToWrite+offset) & 0xfff)
    621627           nrpages++;
    622628 
    623        map->commitPage(offset & ~0xfff, TRUE, nrpages);
     629       map->commitRange((ULONG)lpBuffer, offset & ~0xfff, TRUE, nrpages);
    624630       map->Release();
    625631  }
    626632  else lpRealBuf = (LPVOID)lpBuffer;
     633
     634  //If this file is also used in a memory map somewhere, then we need
     635  //to tell the map to flush all modified contents to disk right NOW
     636  DWORD curfilepos;
     637  map = Win32MemMap::findMapByFile(pHMHandleData->hWin32Handle);
     638  if(map) {
     639      curfilepos = SetFilePointer(pHMHandleData, 0, NULL, FILE_CURRENT);
     640
     641      dprintf(("Flush memory maps to disk before writing!!"));
     642      map->flushView(MMAP_FLUSHVIEW_ALL, curfilepos, nNumberOfBytesToWrite);
     643  }
    627644
    628645  if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) {
     
    635652                            lpNumberOfBytesWritten);
    636653//  }
     654
     655  if(map && bRC) {
     656      dprintf(("Invalidate memory map after file writing!!"));
     657      map->invalidatePages(curfilepos, *lpNumberOfBytesWritten);
     658  }
    637659
    638660  dprintf(("KERNEL32: HMDeviceFileClass::WriteFile returned %08xh\n",
Note: See TracChangeset for help on using the changeset viewer.