From 4026211154b19abe9ce27c705a30e0278a2b224d Mon Sep 17 00:00:00 2001 From: Ting-Wei Lan Date: Tue, 19 Dec 2017 17:37:58 +0800 Subject: [PATCH] v4l2object: Don't use mmap64 if off_t is 64-bit The difference between mmap and mmap64 is the type of 'offset' argument. mmap64 always uses a 64-bit interger as offset, while mmap uses off_t, whose size can vary on different operating systems or architectures. However, not all operating systems support mmap64. Fortunately, although FreeBSD only has mmap, its off_t is always 64-bit regardless of architectures, so we can simply use mmap when sizeof(off_t) == 8. https://bugzilla.gnome.org/show_bug.cgi?id=791779 --- configure.ac | 2 +- meson.build | 1 + sys/v4l2/gstv4l2object.c | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 6e3e577..1a0df35 100644 --- a/configure.ac +++ b/configure.ac @@ -197,7 +197,7 @@ fi dnl Check for mmap (needed by electricfence plugin) AC_FUNC_MMAP -AC_CHECK_FUNCS([mmap64]) +AC_CHECK_SIZEOF([off_t]) AM_CONDITIONAL(GST_HAVE_MMAP, test "x$ac_cv_func_mmap_fixed_mapped" = "xyes") dnl Check for mmap (needed by electricfence plugin) diff --git a/meson.build b/meson.build index ebae8cb..6c1868b 100644 --- a/meson.build +++ b/meson.build @@ -126,6 +126,7 @@ cdata.set('SIZEOF_INT', cc.sizeof('int')) cdata.set('SIZEOF_LONG', cc.sizeof('long')) cdata.set('SIZEOF_SHORT', cc.sizeof('short')) cdata.set('SIZEOF_VOIDP', cc.sizeof('void*')) +cdata.set('SIZEOF_OFF_T', cc.sizeof('off_t')) # Here be fixmes. # FIXME: check if this is correct diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index 81abb5d..6c7a366 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -55,6 +55,10 @@ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug); #define ENCODED_BUFFER_SIZE (2 * 1024 * 1024) +#if SIZEOF_OFF_T == 8 +#define mmap64 mmap +#endif + enum { PROP_0, -- 2.7.4