Ticket #514: ext_darwin.2.patch
| File ext_darwin.2.patch, 2.2 KB (added by , 20 years ago) |
|---|
-
ext.c
old new 233 233 234 234 //#define MAP_PRIVATE 235 235 //#define MAP_SHARED 236 #undef MAP_ANON237 236 LPVOID FILE_dommap( int unix_handle, LPVOID start, 238 237 DWORD size_high, DWORD size_low, 239 238 DWORD offset_high, DWORD offset_low, … … 248 247 249 248 if (unix_handle == -1) 250 249 { 251 #ifdef MAP_ANON250 #ifdef CONFIG_DARWIN 252 251 // printf("Anonymous\n"); 253 252 flags |= MAP_ANON; 253 fd = -1; 254 254 #else 255 255 static int fdzero = -1; 256 256 … … 263 263 } 264 264 } 265 265 fd = fdzero; 266 #endif /* MAP_ANON */266 #endif /* CONFIG_DARWIN */ 267 267 /* Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap */ 268 268 #ifdef MAP_SHARED 269 269 flags &= ~MAP_SHARED; … … 276 276 // printf("fd %x, start %x, size %x, pos %x, prot %x\n",fd,start,size_low, offset_low, prot); 277 277 // if ((ret = mmap( start, size_low, prot, 278 278 // flags, fd, offset_low )) != (LPVOID)-1) 279 #ifndef CONFIG_DARWIN 279 280 if ((ret = mmap( start, size_low, prot, 280 281 MAP_PRIVATE | MAP_FIXED, fd, offset_low )) != (LPVOID)-1) 282 #else 283 if ((ret = mmap( start, size_low, prot, MAP_PRIVATE | MAP_FIXED | MAP_ANON, fd, offset_low )) != (LPVOID)-1) 284 #endif /* CONFIG_DARWIN */ 281 285 { 282 286 // printf("address %08x\n", *(int*)ret); 283 287 // printf("%x\n", ret); … … 471 475 472 476 if ((type&(MEM_RESERVE|MEM_COMMIT)) == 0) return NULL; 473 477 478 #ifndef CONFIG_DARWIN 474 479 fd=open("/dev/zero", O_RDWR); 475 480 if(fd<0){ 476 481 perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: " ); 477 482 return NULL; 478 483 } 484 #endif /* CONFIG_DARWIN */ 479 485 480 486 if (type&MEM_RESERVE && (unsigned)address&0xffff) { 481 487 size += (unsigned)address&0xffff; … … 525 531 } 526 532 } 527 533 534 #ifndef CONFIG_DARWIN 528 535 answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC, 529 536 MAP_PRIVATE, fd, 0); 537 #else 538 /* mmap feeding from fd from /dev/zero doesn't work on darwin ! */ 539 answer=mmap(address, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); 540 #endif /* CONFIG_DARWIN */ 530 541 // answer=FILE_dommap(-1, address, 0, size, 0, 0, 531 542 // PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE); 532 543 close(fd);
