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.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc
index 7c7d84c86..6beb45a2e 100644
--- a/winsup/cygwin/mmap.cc
+++ b/winsup/cygwin/mmap.cc
@@ -203,7 +203,7 @@ mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t off)
caddr_t base = addr;
HANDLE h;
- if (fd == -1)
+ if ((flags & MAP_ANONYMOUS) || fd == -1)
{
fh_paging_file.set_io_handle (INVALID_HANDLE_VALUE);
fh = &fh_paging_file;
@@ -463,8 +463,16 @@ fhandler_disk_file::mmap (caddr_t *addr, size_t len, DWORD access,
if (!base || ((flags & MAP_FIXED) && base != addr))
{
- __seterrno ();
- syscall_printf ("-1 = mmap(): MapViewOfFileEx failed with %E");
+ if (!base)
+ {
+ __seterrno ();
+ syscall_printf ("-1 = mmap(): MapViewOfFileEx failed with %E");
+ }
+ else
+ {
+ set_errno (EINVAL);
+ syscall_printf ("-1 = mmap(): address shift with MAP_FIXED given");
+ }
CloseHandle (h);
return INVALID_HANDLE_VALUE;
}