Ignore:
Timestamp:
Jul 1, 2000, 11:50:55 AM (25 years ago)
Author:
sandervl
Message:

memory map fixes

File:
1 edited

Legend:

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

    r3765 r3782  
    1 /* $Id: hmfile.cpp,v 1.7 2000-06-28 18:08:34 sandervl Exp $ */
     1/* $Id: hmfile.cpp,v 1.8 2000-07-01 09:50:54 sandervl Exp $ */
    22
    33/*
     
    425425  //SvL: DosRead doesn't like writing to memory addresses returned by
    426426  //     DosAliasMem -> search for original memory mapped pointer and use
    427   //     that one
    428   map = Win32MemMapView::findMapByView((ULONG)lpBuffer, &offset, MEMMAP_ACCESS_READ);
     427  //     that one + commit pages if not already present
     428  map = Win32MemMapView::findMapByView((ULONG)lpBuffer, &offset, MEMMAP_ACCESS_WRITE);
    429429  if(map) {
    430430        lpRealBuf = (LPVOID)((ULONG)map->getMappingAddr() + offset);
     
    432432        if(offset & 0xfff)
    433433                nrpages++;
    434         else
    435434        if(nNumberOfBytesToRead & 0xfff)
    436435                nrpages++;
     
    519518                                    LPOVERLAPPED  lpOverlapped)
    520519{
    521   BOOL bRC;
     520  LPVOID       lpRealBuf;
     521  Win32MemMap *map;
     522  DWORD        offset;
     523  BOOL         bRC;
    522524
    523525  dprintfl(("KERNEL32: HMDeviceFileClass::WriteFile %s(%08x,%08x,%08x,%08x,%08x) - stub?\n",
     
    538540  }
    539541
     542  //SvL: DosWrite doesn't like reading from memory addresses returned by
     543  //     DosAliasMem -> search for original memory mapped pointer and use
     544  //     that one + commit pages if not already present
     545  map = Win32MemMapView::findMapByView((ULONG)lpBuffer, &offset, MEMMAP_ACCESS_READ);
     546  if(map) {
     547        lpRealBuf = (LPVOID)((ULONG)map->getMappingAddr() + offset);
     548        DWORD nrpages = nNumberOfBytesToWrite/4096;
     549        if(offset & 0xfff)
     550                nrpages++;
     551        if(nNumberOfBytesToWrite & 0xfff)
     552                nrpages++;
     553
     554        map->commitPage(offset & ~0xfff, TRUE, nrpages);
     555  }
     556  else  lpRealBuf = (LPVOID)lpBuffer;
     557
    540558  if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) {
    541559        dprintf(("ERROR: Overlapped IO not yet implememented!!"));
     
    543561//  else {
    544562        bRC = OSLibDosWrite(pHMHandleData->hHMHandle,
    545                             (PVOID)lpBuffer,
     563                            (PVOID)lpRealBuf,
    546564                            nNumberOfBytesToWrite,
    547565                            lpNumberOfBytesWritten);
Note: See TracChangeset for help on using the changeset viewer.