Changeset 3782 for trunk/src/kernel32/mmap.cpp
- Timestamp:
- Jul 1, 2000, 11:50:55 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/mmap.cpp
r3609 r3782 1 /* $Id: mmap.cpp,v 1.4 1 2000-05-26 18:42:55 sandervl Exp $ */1 /* $Id: mmap.cpp,v 1.42 2000-07-01 09:50:55 sandervl Exp $ */ 2 2 3 3 /* … … 197 197 198 198 dprintf(("Win32MemMap::commitPage %x (faultaddr %x)", pageAddr, lpPageFaultAddr)); 199 if(hMemFile != -1) { 200 // for(i=0;i<nrpages;i++) { 199 if(hMemFile != -1) 200 { 201 int faultsize = nrpages*PAGE_SIZE; 202 203 offset = pageAddr - (ULONG)pMapping; 204 if(offset + faultsize > mSize) { 205 faultsize = mSize - offset; 206 } 207 208 while(faultsize) { 201 209 if(VirtualQuery((LPSTR)pageAddr, &memInfo, sizeof(MEMORY_BASIC_INFORMATION)) == 0) { 202 210 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, nrpages*PAGE_SIZE)); 203 211 goto fail; 204 212 } 205 memInfo.RegionSize = min(memInfo.RegionSize, nrpages*PAGE_SIZE);213 memInfo.RegionSize = min(memInfo.RegionSize, faultsize); 206 214 //Only changes the state of the pages with the same attribute flags 207 215 //(returned in memInfo.RegionSize) 208 216 //If it's smaller than the mNrPages, it simply means one or more of the 209 217 //other pages have already been committed 210 if(memInfo.State & MEM_COMMIT) 211 {//if it's already committed, then the app tried to write to it 212 if(!fWriteAccess) { 213 dprintf(("Win32MemMap::commitPage: Huh? Already committed and not trying to write (%x,%x) failed for %x", pageAddr, memInfo.RegionSize)); 214 goto fail; 215 } 216 if(VirtualProtect((LPVOID)pageAddr, memInfo.RegionSize, newProt, &oldProt) == FALSE) { 217 dprintf(("Win32MemMap::commitPage: Failed to set write flag on page (%x,%x) failed for %x", pageAddr, memInfo.RegionSize)); 218 goto fail; 219 } 220 } 221 else { 218 if(!(memInfo.State & MEM_COMMIT)) 219 { 222 220 if(VirtualAlloc((LPVOID)pageAddr, memInfo.RegionSize, MEM_COMMIT, PAGE_READWRITE) == FALSE) { 223 221 goto fail; … … 243 241 } 244 242 } 245 if( mProtFlags!= PAGE_READWRITE) {243 if(newProt != PAGE_READWRITE) { 246 244 if(VirtualProtect((LPVOID)pageAddr, memInfo.RegionSize, newProt, &oldProt) == FALSE) { 247 245 goto fail; … … 249 247 } 250 248 } 251 // pageAddr += PAGE_SIZE; 252 // } 249 faultsize -= memInfo.RegionSize; 250 pageAddr += memInfo.RegionSize; 251 } 253 252 } 254 253 else { 255 254 ULONG sizeleft = nrpages*PAGE_SIZE; 256 while(sizeleft) {257 255 while(sizeleft) 256 { 258 257 if(VirtualQuery((LPSTR)pageAddr, &memInfo, sizeof(MEMORY_BASIC_INFORMATION)) == 0) { 259 258 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed", pageAddr, sizeleft));
Note:
See TracChangeset
for help on using the changeset viewer.