|
@@ -730,7 +730,6 @@ static int
|
|
|
memory_map (char *path, const char *file, void **buf, size_t bytes)
|
|
memory_map (char *path, const char *file, void **buf, size_t bytes)
|
|
|
{
|
|
{
|
|
|
int32_t fd;
|
|
int32_t fd;
|
|
|
- void *addr_orig;
|
|
|
|
|
void *addr;
|
|
void *addr;
|
|
|
int32_t res;
|
|
int32_t res;
|
|
|
char *buffer;
|
|
char *buffer;
|
|
@@ -772,28 +771,21 @@ retry_write:
|
|
|
}
|
|
}
|
|
|
free (buffer);
|
|
free (buffer);
|
|
|
|
|
|
|
|
- addr_orig = mmap (NULL, bytes, PROT_NONE,
|
|
|
|
|
- MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
|
|
|
|
|
|
+ addr = mmap (NULL, bytes, PROT_READ | PROT_WRITE,
|
|
|
|
|
+ MAP_SHARED, fd, 0);
|
|
|
|
|
|
|
|
- if (addr_orig == MAP_FAILED) {
|
|
|
|
|
- goto error_close_unlink;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
|
|
|
|
|
- MAP_FIXED | MAP_SHARED, fd, 0);
|
|
|
|
|
-
|
|
|
|
|
- if (addr != addr_orig) {
|
|
|
|
|
|
|
+ if (addr == MAP_FAILED) {
|
|
|
goto error_close_unlink;
|
|
goto error_close_unlink;
|
|
|
}
|
|
}
|
|
|
#ifdef MADV_NOSYNC
|
|
#ifdef MADV_NOSYNC
|
|
|
- madvise(addr_orig, bytes, MADV_NOSYNC);
|
|
|
|
|
|
|
+ madvise(addr, bytes, MADV_NOSYNC);
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
res = close (fd);
|
|
res = close (fd);
|
|
|
if (res) {
|
|
if (res) {
|
|
|
return (-1);
|
|
return (-1);
|
|
|
}
|
|
}
|
|
|
- *buf = addr_orig;
|
|
|
|
|
|
|
+ *buf = addr;
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|