v4l2object: Don't use mmap64 if off_t is 64-bit
authorTing-Wei Lan <lantw@src.gnome.org>
Tue, 19 Dec 2017 09:37:58 +0000 (17:37 +0800)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 22 Dec 2017 15:30:49 +0000 (10:30 -0500)
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
meson.build
sys/v4l2/gstv4l2object.c

index 6e3e577..1a0df35 100644 (file)
@@ -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)
index ebae8cb..6c1868b 100644 (file)
@@ -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
index 81abb5d..6c7a366 100644 (file)
@@ -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,