| From 74b3844737b03492756b4f896c938b504b069f14 Mon Sep 17 00:00:00 2001 |
| From: Jérémie Galarneau <jeremie.galarneau@efficios.com> |
| Date: Tue, 17 Jan 2023 16:57:35 -0500 |
| Subject: [PATCH] compat: off64_t is not defined by musl |
| |
| This helps compile with latest musl, where off64_t is not defined unless |
| _LARGEFILE64_SOURCE is defined. On glibc, _LARGEFILE64_SOURCE is defined |
| if _GNU_SOURCE is defined, so the problem is only seen with musl. |
| |
| Since the project uses AC_SYS_LARGEFILE, which from the autoconf doc: |
| "arrange for 64-bit file offsets, known as large-file support." |
| |
| As such, it is safe to assume off_t is 64-bit wide. This is checked by a |
| static_assert to catch any platform where autoconf would let a 32-bit |
| off_t slip. |
| |
| Upstream-Status: Submitted [https://review.lttng.org/c/lttng-tools/+/9268] |
| Reported-by: Khem Raj <raj.khem@gmail.com> |
| Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com> |
| Change-Id: If2c6007a8c85bc3f3065002af8a7538b882fb4a8 |
| --- |
| |
| --- a/src/common/compat/compat-fcntl.c |
| +++ b/src/common/compat/compat-fcntl.c |
| @@ -8,14 +8,17 @@ |
| #define _LGPL_SOURCE |
| #include <common/compat/fcntl.h> |
| #include <common/macros.h> |
| +#include <common/bug.h> |
| +#include <stdint.h> |
| #include <unistd.h> |
| |
| #ifdef __linux__ |
| |
| LTTNG_HIDDEN |
| -int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes, |
| +int compat_sync_file_range(int fd, off_t offset, off_t nbytes, |
| unsigned int flags) |
| { |
| + LTTNG_BUILD_BUG_ON(sizeof(off_t) != sizeof(int64_t)); |
| #ifdef HAVE_SYNC_FILE_RANGE |
| return sync_file_range(fd, offset, nbytes, flags); |
| #else |
| --- a/src/common/compat/fcntl.h |
| +++ b/src/common/compat/fcntl.h |
| @@ -13,16 +13,12 @@ |
| |
| #include <common/compat/errno.h> |
| |
| -#if (defined(__CYGWIN__)) |
| -typedef long long off64_t; |
| -#endif |
| - |
| #if (defined(__FreeBSD__) || defined(__sun__)) |
| typedef off64_t loff_t; |
| #endif |
| |
| #ifdef __linux__ |
| -extern int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes, |
| +extern int compat_sync_file_range(int fd, off_t offset, off_t nbytes, |
| unsigned int flags); |
| #define lttng_sync_file_range(fd, offset, nbytes, flags) \ |
| compat_sync_file_range(fd, offset, nbytes, flags) |
| @@ -37,8 +33,8 @@ extern int compat_sync_file_range(int fd |
| #define SYNC_FILE_RANGE_WAIT_BEFORE 0 |
| #define SYNC_FILE_RANGE_WRITE 0 |
| |
| -static inline int lttng_sync_file_range(int fd, off64_t offset, |
| - off64_t nbytes, unsigned int flags) |
| +static inline int lttng_sync_file_range(int fd, off_t offset, |
| + off_t nbytes, unsigned int flags) |
| { |
| return -ENOSYS; |
| } |