X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fcommon%2Fvmfill.c;h=d44ad50469afa082baaa4ddabb9438f6599ba1a5;hb=281b80f0e70fe28356c3f0ded8b86f28a5c74d0a;hp=32b6cce23ba526e32d6f5e08427dc0854af96b27;hpb=daa94c26611a54cddfa02614b4329bc2ba71d356;p=libc-test diff --git a/src/common/vmfill.c b/src/common/vmfill.c index 32b6cce..d44ad50 100644 --- a/src/common/vmfill.c +++ b/src/common/vmfill.c @@ -7,6 +7,9 @@ #ifndef PAGE_SIZE #define PAGE_SIZE sysconf(_SC_PAGE_SIZE) #endif +#ifndef MAP_ANONYMOUS + #define MAP_ANONYMOUS 0 +#endif /* max mmap size, *start is the largest power-of-2 size considered */ static size_t mmax(int fd, size_t *start) @@ -15,7 +18,7 @@ static size_t mmax(int fd, size_t *start) void *p; for (i=n=*start; i>=PAGE_SIZE; i/=2) { - if ((p=mmap(0, n, PROT_NONE, MAP_PRIVATE, fd, 0)) == MAP_FAILED) { + if ((p=mmap(0, n, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, fd, 0)) == MAP_FAILED) { n -= i/2; } else { munmap(p, n); @@ -34,7 +37,7 @@ the return value is the number of mappings or -1 on failure. */ int t_vmfill(void **p, size_t *n, int len) { - int fd = open("/dev/zero", O_RDWR); + int fd = MAP_ANONYMOUS ? -1 : open("/dev/zero", O_RDWR); size_t start = SIZE_MAX/2 + 1; size_t m; void *q; @@ -44,7 +47,7 @@ int t_vmfill(void **p, size_t *n, int len) m = mmax(fd, &start); if (!m) break; - q = mmap(0, m, PROT_NONE, MAP_PRIVATE, fd, 0); + q = mmap(0, m, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, fd, 0); if (q == MAP_FAILED) return -1; if (i < len) {