libv4l: use __syscall for mmap on FreeBSD
authorHans de Goede <hdegoede@redhat.com>
Fri, 15 Jan 2010 12:43:04 +0000 (13:43 +0100)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 24 Feb 2010 00:44:40 +0000 (21:44 -0300)
In order to get 64 bit addresses returned from the mmap syscall not
truncated on FreeBSD __syscall must be used as just syscall only returns
32 bits.

Priority: normal

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
lib/libv4lconvert/libv4lsyscall-priv.h

index a456cee..08739df 100644 (file)
@@ -58,7 +58,6 @@
 #define        _IOC_TYPE(cmd) IOCGROUP(cmd)
 #define        _IOC_SIZE(cmd) IOCPARM_LEN(cmd)
 #define        MAP_ANONYMOUS MAP_ANON
-#define        SYS_mmap2 SYS_mmap
 #define        MMAP2_PAGE_SHIFT 0
 typedef off_t __off_t;
 #endif
@@ -83,9 +82,17 @@ typedef off_t __off_t;
     syscall(SYS_read, (int)(fd), (void *)(buf), (size_t)(len));
 #define SYS_WRITE(fd, buf, len) \
     syscall(SYS_write, (int)(fd), (void *)(buf), (size_t)(len));
+
+#ifdef __FreeBSD__
+#define SYS_MMAP(addr, len, prot, flags, fd, off) \
+    __syscall(SYS_mmap, (void *)(addr), (size_t)(len), \
+       (int)(prot), (int)(flags), (int)(fd), (__off_t)(off))
+#else
 #define SYS_MMAP(addr, len, prot, flags, fd, off) \
     syscall(SYS_mmap2, (void *)(addr), (size_t)(len), \
        (int)(prot), (int)(flags), (int)(fd), (__off_t)((off) >> MMAP2_PAGE_SHIFT))
+#endif
+
 #define SYS_MUNMAP(addr, len) \
     syscall(SYS_munmap, (void *)(addr), (size_t)(len))