* [PATCH 2/4] Globally enable LARGEFILE support
@ 2015-05-10 10:57 Felix Janda
0 siblings, 0 replies; only message in thread
From: Felix Janda @ 2015-05-10 10:57 UTC (permalink / raw)
To: linux-media
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@posteo.de>
---
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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2015-05-10 10:57 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-10 10:57 [PATCH 2/4] Globally enable LARGEFILE support Felix Janda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox