From 6dddb268df08fd91f8e0f189f948ad76e5805dca Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 23 Nov 2022 11:38:20 +0100 Subject: lib/replace: let rep_openat2() inject O_LARGEFILE as needed BUG: https://bugzilla.samba.org/show_bug.cgi?id=15251 Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme --- lib/replace/replace.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'lib/replace') diff --git a/lib/replace/replace.c b/lib/replace/replace.c index cbf372e494f..68829f2a3c9 100644 --- a/lib/replace/replace.c +++ b/lib/replace/replace.c @@ -1116,6 +1116,22 @@ long rep_openat2(int dirfd, const char *pathname, struct open_how *how, size_t size) { #ifdef __NR_openat2 +#if _FILE_OFFSET_BITS == 64 && SIZE_MAX == 0xffffffffUL && defined(O_LARGEFILE) + struct open_how __how; + +#if defined(O_PATH) && ! defined(DISABLE_OPATH) + if ((how->flags & O_PATH) == 0) +#endif + { + if (sizeof(__how) == size) { + __how = *how; + + __how.flags |= O_LARGEFILE; + how = &__how; + } + } +#endif + return syscall(__NR_openat2, dirfd, pathname, -- cgit v1.2.1