summaryrefslogtreecommitdiff
path: root/graphics/libv4l/patches/patch-ak
blob: 111d969b89d1caec35f47f81408f3ae06d7e0886 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
$NetBSD: patch-ak,v 1.5 2016/09/08 15:43:12 richard Exp $

* XXX
* 'mode_t' is promoted to `int' when passwd through `...'.
* if SYS_open doesn't exist, use SYS_openat

--- libv4l1/libv4l1.c.orig	2008-08-06 08:46:06.000000000 +0000
+++ libv4l1/libv4l1.c
@@ -44,12 +44,13 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <syscall.h>
 #include <fcntl.h>
 #include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/mman.h>
+#ifdef __linux__
+#include <syscall.h>
 /* These headers are not needed by us, but by linux/videodev2.h,
    which is broken on some systems and doesn't include them itself :( */
 #include <sys/time.h>
@@ -58,10 +59,24 @@
 /* end broken header workaround includes */
 #include <linux/videodev.h>
 #include <linux/videodev2.h>
+#else
+#include <sys/syscall.h>
+#include <sys/ioctl.h>
+#include "videodev.h"
+#ifdef __sun
+#include <sys/videodev2.h>
+#else
+#include <sys/videoio.h>
+#endif
+#endif
 #include <libv4l2.h>
 #include "libv4l1.h"
 #include "libv4l1-priv.h"
 
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
 #define V4L1_SUPPORTS_ENUMINPUT 0x01
 #define V4L1_SUPPORTS_ENUMSTD   0x02
 #define V4L1_PIX_FMT_TOUCHED    0x04
@@ -267,13 +282,20 @@ int v4l1_open (const char *file, int ofl
     mode_t mode;
 
     va_start (ap, oflag);
-    mode = va_arg (ap, mode_t);
+    mode = (sizeof (mode_t) < sizeof (int) ? (mode_t)va_arg (ap, int) : va_arg (ap, mode_t));
 
+#ifdef SYS_open
     fd = syscall(SYS_open, file, oflag, mode);
-
+#else
+    fd = syscall(SYS_openat, AT_FDCWD, file, oflag, mode);
+#endif
     va_end(ap);
   } else
-    fd = syscall(SYS_open, file, oflag);
+#ifdef SYS_open
+     fd = syscall(SYS_open, file, oflag);
+#else
+     fd = syscall(SYS_openat, AT_FDCWD, file, oflag);
+#endif
   /* end of original open code */
 
   if (fd == -1)
@@ -434,7 +456,11 @@ int v4l1_dup(int fd)
   int index;
 
   if ((index = v4l1_get_index(fd)) == -1)
+#ifdef __sun
+    return syscall(SYS_fcntl, fd, F_DUPFD, 0);
+#else
     return syscall(SYS_dup, fd);
+#endif
 
   devices[index].open_count++;