| From 1077d5bebffacfd4b09896ed890fb45a5b3c6dc6 Mon Sep 17 00:00:00 2001 |
| From: Max Filippov <jcmvbkbc@gmail.com> |
| Date: Fri, 10 May 2019 07:13:19 -0700 |
| Subject: [PATCH] preadv/pwritev: fix offset argument type |
| |
| preadv/pwritev don't provide separate version for 64-bit wide off_t, |
| and default to 32-bit wide off_t, which results in a mismatch between |
| declaration and definition for user programs built with |
| -D_FILE_OFFSET_BITS=64. |
| Make offset argument of both functions __off64_t. |
| This fixes test misc/tst-preadvwritev on xtensa. |
| |
| Backported from: 423e49023eeb ("preadv/pwritev: fix offset argument type") |
| Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> |
| --- |
| include/sys/uio.h | 4 ++-- |
| libc/sysdeps/linux/common/preadv.c | 2 +- |
| libc/sysdeps/linux/common/pwritev.c | 2 +- |
| 3 files changed, 4 insertions(+), 4 deletions(-) |
| |
| diff --git a/include/sys/uio.h b/include/sys/uio.h |
| index aa766f9b1187..330426fec492 100644 |
| --- a/include/sys/uio.h |
| +++ b/include/sys/uio.h |
| @@ -59,7 +59,7 @@ extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count); |
| This function is a cancellation point and therefore not marked with |
| __THROW. */ |
| extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, |
| - off_t __offset) __wur; |
| + __off64_t __offset) __wur; |
| |
| /* Write data pointed by the buffers described by IOVEC, which is a |
| vector of COUNT 'struct iovec's, to file descriptor FD at the given |
| @@ -71,7 +71,7 @@ extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, |
| This function is a cancellation point and therefore not marked with |
| __THROW. */ |
| extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, |
| - off_t __offset) __wur; |
| + __off64_t __offset) __wur; |
| #endif /* Use misc. */ |
| |
| __END_DECLS |
| diff --git a/libc/sysdeps/linux/common/preadv.c b/libc/sysdeps/linux/common/preadv.c |
| index fd9dde4b999c..6a07d5df87e0 100644 |
| --- a/libc/sysdeps/linux/common/preadv.c |
| +++ b/libc/sysdeps/linux/common/preadv.c |
| @@ -21,7 +21,7 @@ |
| |
| #ifdef __NR_preadv |
| ssize_t |
| -preadv (int fd, const struct iovec *vector, int count, off_t offset) |
| +preadv (int fd, const struct iovec *vector, int count, __off64_t offset) |
| { |
| unsigned long pos_l, pos_h; |
| |
| diff --git a/libc/sysdeps/linux/common/pwritev.c b/libc/sysdeps/linux/common/pwritev.c |
| index bef5bcf69b46..f07c40e6de3c 100644 |
| --- a/libc/sysdeps/linux/common/pwritev.c |
| +++ b/libc/sysdeps/linux/common/pwritev.c |
| @@ -21,7 +21,7 @@ |
| |
| #ifdef __NR_pwritev |
| ssize_t |
| -pwritev (int fd, const struct iovec *vector, int count, off_t offset) |
| +pwritev (int fd, const struct iovec *vector, int count, __off64_t offset) |
| { |
| unsigned long pos_l, pos_h; |
| |
| -- |
| 2.11.0 |
| |