]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
open64: Force O_LARGEFILE on all architectures
authorStafford Horne <shorne@gmail.com>
Sun, 26 Dec 2021 06:24:53 +0000 (15:24 +0900)
committerStafford Horne <shorne@gmail.com>
Thu, 30 Dec 2021 22:10:19 +0000 (07:10 +0900)
When running tests on OpenRISC which has 32-bit wordsize but 64-bit
timesize it was found that O_LARGEFILE is not being set when calling
open64.  For 64-bit architectures the O_LARGEFILE flag is generally
implied by the kernel according to force_o_largefile.  However, for
32-bit architectures this is not done.

For this patch we unconditionally now set the O_LARGEFILE flag for
open64 class syscalls as there is no harm in doing so.

Tested on the OpenRISC the build works and timezone/tst-tzset passes
which was failing before.  I would expect this also would fix arc.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
sysdeps/unix/sysv/linux/open64.c
sysdeps/unix/sysv/linux/open64_nocancel.c
sysdeps/unix/sysv/linux/openat64.c
sysdeps/unix/sysv/linux/openat64_nocancel.c

index 0904696973551e27dad1e9cfdb709498ce7306fb..8e2eb0bad8cb68384d8dd32b0041dac86e246aca 100644 (file)
 #include <sysdep-cancel.h>
 #include <shlib-compat.h>
 
-
-#ifdef __OFF_T_MATCHES_OFF64_T
-# define EXTRA_OPEN_FLAGS 0
-#else
-# define EXTRA_OPEN_FLAGS O_LARGEFILE
-#endif
-
 /* Open FILE with access OFLAG.  If O_CREAT or O_TMPFILE is in OFLAG,
    a third argument is the file protection.  */
 int
@@ -45,7 +38,7 @@ __libc_open64 (const char *file, int oflag, ...)
       va_end (arg);
     }
 
-  return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS,
+  return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag | O_LARGEFILE,
                         mode);
 }
 
index d7f35656a15eaf4a347784b5df7642afa75e2390..a270891dc8c5d6b2274ee5a5e7210fcfe4d6cae9 100644 (file)
 
 #include <not-cancel.h>
 
-#ifdef __OFF_T_MATCHES_OFF64_T
-# define EXTRA_OPEN_FLAGS 0
-#else
-# define EXTRA_OPEN_FLAGS O_LARGEFILE
-#endif
-
 int
 __open64_nocancel (const char *file, int oflag, ...)
 {
@@ -42,7 +36,7 @@ __open64_nocancel (const char *file, int oflag, ...)
       va_end (arg);
     }
 
-  return INLINE_SYSCALL_CALL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS,
+  return INLINE_SYSCALL_CALL (openat, AT_FDCWD, file, oflag | O_LARGEFILE,
                              mode);
 }
 
index dc226567c196c171cca976dfd27dbc1f3dcc637f..9019d2b48fd20db876e067aa6d2f0691871beec4 100644 (file)
 
 #include <sysdep-cancel.h>
 
-#ifdef __OFF_T_MATCHES_OFF64_T
-# define EXTRA_OPEN_FLAGS 0
-#else
-# define EXTRA_OPEN_FLAGS O_LARGEFILE
-#endif
-
 /* Open FILE with access OFLAG.  Interpret relative paths relative to
    the directory associated with FD.  If OFLAG includes O_CREAT or
    O_TMPFILE, a fourth argument is the file protection.  */
@@ -42,7 +36,7 @@ __libc_openat64 (int fd, const char *file, int oflag, ...)
       va_end (arg);
     }
 
-  return SYSCALL_CANCEL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, mode);
+  return SYSCALL_CANCEL (openat, fd, file, oflag | O_LARGEFILE, mode);
 }
 
 strong_alias (__libc_openat64, __openat64)
index 51377aea45e49ab671d491ea191db8e023c7f521..b9c0d98770731cbd94e06b14d07b8f4bbffc6283 100644 (file)
 #include <sysdep-cancel.h>
 #include <not-cancel.h>
 
-#ifdef __OFF_T_MATCHES_OFF64_T
-# define EXTRA_OPEN_FLAGS 0
-#else
-# define EXTRA_OPEN_FLAGS O_LARGEFILE
-#endif
-
 int
 __openat64_nocancel (int fd, const char *file, int oflag, ...)
 {
@@ -40,7 +34,7 @@ __openat64_nocancel (int fd, const char *file, int oflag, ...)
       va_end (arg);
     }
 
-  return INLINE_SYSCALL_CALL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS,
+  return INLINE_SYSCALL_CALL (openat, fd, file, oflag | O_LARGEFILE,
                              mode);
 }
 hidden_def (__openat64_nocancel)