diff options
Diffstat (limited to 'winsup/cygwin/mmap.cc')
-rw-r--r-- | winsup/cygwin/mmap.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index 3c1552f81..309620a90 100644 --- a/winsup/cygwin/mmap.cc +++ b/winsup/cygwin/mmap.cc @@ -1650,6 +1650,29 @@ munlock (const void *addr, size_t len) return ret; } +extern "C" int +posix_madvise (void *addr, size_t len, int advice) +{ + /* Check parameters. */ + if (advice < POSIX_MADV_NORMAL || advice > POSIX_MADV_DONTNEED + || !len) + return EINVAL; + + /* Check requested memory area. */ + MEMORY_BASIC_INFORMATION m; + char *p = (char *) addr; + char *endp = p + len; + while (p < endp) + { + if (!VirtualQuery (p, &m, sizeof m) || m.State == MEM_FREE) + return ENOMEM; + p = (char *) m.BaseAddress + m.RegionSize; + } + + /* Eventually do nothing. */ + return 0; +} + /* * Base implementation: * |