Changeset 9911 for trunk/src/kernel32/hmfile.cpp
- Timestamp:
- Mar 6, 2003, 11:44:34 AM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmfile.cpp
r9824 r9911 1 /* $Id: hmfile.cpp,v 1.4 0 2003-02-18 18:48:54sandervl Exp $ */1 /* $Id: hmfile.cpp,v 1.41 2003-03-06 10:44:33 sandervl Exp $ */ 2 2 3 3 /* … … 527 527 if(map) { 528 528 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) 531 531 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); 536 534 map->Release(); 537 535 } 538 536 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 } 539 547 540 548 if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) { … … 615 623 if(map) { 616 624 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) 621 627 nrpages++; 622 628 623 map->commit Page(offset & ~0xfff, TRUE, nrpages);629 map->commitRange((ULONG)lpBuffer, offset & ~0xfff, TRUE, nrpages); 624 630 map->Release(); 625 631 } 626 632 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 } 627 644 628 645 if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) { … … 635 652 lpNumberOfBytesWritten); 636 653 // } 654 655 if(map && bRC) { 656 dprintf(("Invalidate memory map after file writing!!")); 657 map->invalidatePages(curfilepos, *lpNumberOfBytesWritten); 658 } 637 659 638 660 dprintf(("KERNEL32: HMDeviceFileClass::WriteFile returned %08xh\n",
Note:
See TracChangeset
for help on using the changeset viewer.