$NetBSD: patch-ak,v 1.4 2012/04/18 17:47:22 hans Exp $ * XXX * 'mode_t' is promoted to `int' when passwd through `...'. --- libv4l1/libv4l1.c.orig 2008-08-06 08:46:06.000000000 +0000 +++ libv4l1/libv4l1.c @@ -44,12 +44,13 @@ #include #include #include -#include #include #include #include #include #include +#ifdef __linux__ +#include /* 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 @@ -58,10 +59,24 @@ /* end broken header workaround includes */ #include #include +#else +#include +#include +#include "videodev.h" +#ifdef __sun +#include +#else +#include +#endif +#endif #include #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,7 +278,7 @@ 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)); fd = syscall(SYS_open, file, oflag, mode); @@ -434,7 +449,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++;