summaryrefslogtreecommitdiff
path: root/libc/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps')
-rw-r--r--libc/sysdeps/linux/arm/mmap.c11
-rw-r--r--libc/sysdeps/linux/common/mmap64.c9
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