summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/mmap.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/mmap.cc')
-rw-r--r--winsup/cygwin/mmap.cc23
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:
*