Use AC_SYS_LARGEFILE so that off_t is 64 bit on all systems in all files. This also makes the O_LARGEFILE flag unecessary. For the LD_PRELOAD libraries we need to be careful on linux with glibc to wrap both mmap/mmap64 and open/open64 correctly. We use the internal types __off_t and __off64_t to get the correct type for use in mmap/mmap64 independent of _FILE_OFFSET_BITS definition. Signed-off-by: Felix Janda <felix.janda@xxxxxxxxx> --- Actually all files should have <config.h> before the other includes to take advantage. --- configure.ac | 2 ++ lib/libv4l1/v4l1compat.c | 23 +++++++++++++++-------- lib/libv4l2/v4l2convert.c | 23 +++++++++++++++-------- utils/dvb/dvbv5-zap.c | 9 +-------- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/configure.ac b/configure.ac index 79c1cfc..5435e6a 100644 --- a/configure.ac +++ b/configure.ac @@ -118,6 +118,8 @@ gl_VISIBILITY AC_CHECK_HEADERS([sys/klog.h]) AC_CHECK_FUNCS([klogctl]) +AC_SYS_LARGEFILE + AC_CACHE_CHECK([for ioctl with POSIX signature], [gl_cv_func_ioctl_posix_signature], [AC_COMPILE_IFELSE( diff --git a/lib/libv4l1/v4l1compat.c b/lib/libv4l1/v4l1compat.c index 393896c..7ee59d9 100644 --- a/lib/libv4l1/v4l1compat.c +++ b/lib/libv4l1/v4l1compat.c @@ -19,8 +19,6 @@ # Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ -#define _LARGEFILE64_SOURCE 1 - #include <config.h> #include <stdlib.h> #include <stdarg.h> @@ -42,7 +40,11 @@ #define LIBV4L_PUBLIC #endif +#if defined(linux) && defined(__GLIBC__) +LIBV4L_PUBLIC int open64(const char *file, int oflag, ...) +#else LIBV4L_PUBLIC int open(const char *file, int oflag, ...) +#endif { int fd; @@ -63,7 +65,7 @@ LIBV4L_PUBLIC int open(const char *file, int oflag, ...) } #if defined(linux) && defined(__GLIBC__) -LIBV4L_PUBLIC int open64(const char *file, int oflag, ...) +LIBV4L_PUBLIC int open(const char *file, int oflag, ...) { int fd; @@ -74,11 +76,11 @@ LIBV4L_PUBLIC int open64(const char *file, int oflag, ...) va_start(ap, oflag); mode = va_arg(ap, mode_t); - fd = v4l1_open(file, oflag | O_LARGEFILE, mode); + fd = v4l1_open(file, oflag, mode); va_end(ap); } else - fd = v4l1_open(file, oflag | O_LARGEFILE); + fd = v4l1_open(file, oflag); return fd; } @@ -115,15 +117,20 @@ LIBV4L_PUBLIC ssize_t read(int fd, void *buffer, size_t n) return v4l1_read(fd, buffer, n); } +#if defined(linux) && defined(__GLIBC__) +LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd, + __off64_t offset) +#else LIBV4L_PUBLIC void *mmap(void *start, size_t length, int prot, int flags, int fd, - __off_t offset) + off_t offset) +#endif { return v4l1_mmap(start, length, prot, flags, fd, offset); } #if defined(linux) && defined(__GLIBC__) -LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd, - __off64_t offset) +LIBV4L_PUBLIC void *mmap(void *start, size_t length, int prot, int flags, int fd, + __off_t offset) { return v4l1_mmap(start, length, prot, flags, fd, offset); } diff --git a/lib/libv4l2/v4l2convert.c b/lib/libv4l2/v4l2convert.c index 0384c13..e2272a2 100644 --- a/lib/libv4l2/v4l2convert.c +++ b/lib/libv4l2/v4l2convert.c @@ -23,8 +23,6 @@ /* prevent GCC 4.7 inlining error */ #undef _FORTIFY_SOURCE -#define _LARGEFILE64_SOURCE 1 - #ifdef ANDROID #include <android-config.h> #else @@ -51,7 +49,11 @@ #define LIBV4L_PUBLIC #endif +#if defined(linux) && defined(__GLIBC__) +LIBV4L_PUBLIC int open64(const char *file, int oflag, ...) +#else LIBV4L_PUBLIC int open(const char *file, int oflag, ...) +#endif { int fd; int v4l_device = 0; @@ -91,7 +93,7 @@ LIBV4L_PUBLIC int open(const char *file, int oflag, ...) } #if defined(linux) && defined(__GLIBC__) -LIBV4L_PUBLIC int open64(const char *file, int oflag, ...) +LIBV4L_PUBLIC int open(const char *file, int oflag, ...) { int fd; @@ -103,11 +105,11 @@ LIBV4L_PUBLIC int open64(const char *file, int oflag, ...) va_start(ap, oflag); mode = va_arg(ap, PROMOTED_MODE_T); - fd = open(file, oflag | O_LARGEFILE, mode); + fd = open64(file, oflag, mode); va_end(ap); } else { - fd = open(file, oflag | O_LARGEFILE); + fd = open64(file, oflag); } /* end of original open code */ @@ -147,15 +149,20 @@ LIBV4L_PUBLIC ssize_t read(int fd, void *buffer, size_t n) return v4l2_read(fd, buffer, n); } +#if defined(linux) && defined(__GLIBC__) +LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd, + __off64_t offset) +#else LIBV4L_PUBLIC void *mmap(void *start, size_t length, int prot, int flags, int fd, - __off_t offset) + off_t offset) +#endif { return v4l2_mmap(start, length, prot, flags, fd, offset); } #if defined(linux) && defined(__GLIBC__) -LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd, - __off64_t offset) +LIBV4L_PUBLIC void *mmap(void *start, size_t length, int prot, int flags, int fd, + __off_t offset) { return v4l2_mmap(start, length, prot, flags, fd, offset); } diff --git a/utils/dvb/dvbv5-zap.c b/utils/dvb/dvbv5-zap.c index c036d15..9fd0798 100644 --- a/utils/dvb/dvbv5-zap.c +++ b/utils/dvb/dvbv5-zap.c @@ -20,9 +20,7 @@ * Bernard Hatt 24/2/04 */ -#define _FILE_OFFSET_BITS 64 -#define _LARGEFILE_SOURCE 1 -#define _LARGEFILE64_SOURCE 1 +#include <config.h> #include <unistd.h> #include <stdlib.h> @@ -34,8 +32,6 @@ #include <argp.h> #include <sys/time.h> -#include <config.h> - #ifdef ENABLE_NLS # define _(string) gettext(string) # include "gettext.h" @@ -976,9 +972,6 @@ int main(int argc, char **argv) if (strcmp(args.filename, "-") != 0) { file_fd = open(args.filename, -#ifdef O_LARGEFILE - O_LARGEFILE | -#endif O_WRONLY | O_CREAT, 0644); if (file_fd < 0) { -- 2.3.6 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html