diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2000-10-07 17:35:36 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2000-10-07 17:35:36 +0000 |
commit | 4ea34a68506bcd5233be1a3bfca9b81b5f9234b2 (patch) | |
tree | 7c8d1066f9b48e736b8be2c52d81708cfbe59e35 /winsup/cygwin/mmap.cc | |
parent | 7aadaf0f7eefe50e4f7d4aa71b71b1f85e37ea6e (diff) | |
download | newlib-4ea34a68506bcd5233be1a3bfca9b81b5f9234b2.zip newlib-4ea34a68506bcd5233be1a3bfca9b81b5f9234b2.tar.gz newlib-4ea34a68506bcd5233be1a3bfca9b81b5f9234b2.tar.bz2 |
* fhandler.h (fhandler_dev_mem): Add methods mmap, munmap and msync.
Add `unit' member.
* fhandler_mem.cc (fhandler_dev_mem): Initialize `unit' as well.
(init): Care for differences between /dev/mem, /dev/kmem (not
implemented yet) and /dev/port.
(open): Change debug message to reflect the device.
(mmap): New function.
(munmap): Ditto.
(msync): Ditto.
(fstat): Use unit when setting st_dev in stat structure.
* mmap.cc (mmap): Handle MAP_ANONYMOUS flag.
Change error handling slightly.
* path.cc (get_device_number): Handle /dev/port.
Diffstat (limited to 'winsup/cygwin/mmap.cc')
-rw-r--r-- | winsup/cygwin/mmap.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index 7c7d84c..6beb45a 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; } |