diff options
Diffstat (limited to 'libc/sysdeps/linux')
-rw-r--r-- | libc/sysdeps/linux/arm/mmap.c | 11 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/mmap64.c | 9 |
2 files changed, 16 insertions, 4 deletions
diff --git a/libc/sysdeps/linux/arm/mmap.c b/libc/sysdeps/linux/arm/mmap.c index 2eea38efc..63f76d7db 100644 --- a/libc/sysdeps/linux/arm/mmap.c +++ b/libc/sysdeps/linux/arm/mmap.c @@ -27,7 +27,6 @@ __ptr_t mmap(__ptr_t addr, size_t len, int prot, #elif defined (__NR_mmap2) #define __NR__mmap __NR_mmap2 - #ifndef MMAP2_PAGE_SHIFT # define MMAP2_PAGE_SHIFT 12 #endif @@ -39,9 +38,17 @@ __ptr_t mmap(__ptr_t addr, size_t len, int prot, { /* check if offset is page aligned */ if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1)) + { + __set_errno(EINVAL); return MAP_FAILED; + } +#ifdef __USE_FILE_OFFSET64 + return (__ptr_t) _mmap (addr, len, prot, flags, + fd,((__u_quad_t) offset >> MMAP2_PAGE_SHIFT)); +#else return (__ptr_t) _mmap (addr, len, prot, flags, - fd,(off_t) (offset >> MMAP2_PAGE_SHIFT)); + fd,((__u_long) offset >> MMAP2_PAGE_SHIFT)); +#endif } #elif defined (__NR_mmap) # define __NR__mmap __NR_mmap diff --git a/libc/sysdeps/linux/common/mmap64.c b/libc/sysdeps/linux/common/mmap64.c index 2cf200dc9..85b0a6f17 100644 --- a/libc/sysdeps/linux/common/mmap64.c +++ b/libc/sysdeps/linux/common/mmap64.c @@ -58,8 +58,13 @@ __ptr_t mmap64(__ptr_t addr, size_t len, int prot, int flags, int fd, __off64_t __set_errno(EINVAL); return MAP_FAILED; } - - return __syscall_mmap2(addr, len, prot, flags, fd, (off_t) (offset >> MMAP2_PAGE_SHIFT)); +#ifdef __USE_FILE_OFFSET64 + return __syscall_mmap2(addr, len, prot, flags, + fd,((__u_quad_t)offset >> MMAP2_PAGE_SHIFT)); +#else + return __syscall_mmap2(addr, len, prot, flags, + fd,((__ulong_t)offset >> MMAP2_PAGE_SHIFT)); +#endif } # endif |