114 lines
2.7 KiB
Plaintext
114 lines
2.7 KiB
Plaintext
$NetBSD: patch-af,v 1.8 2016/09/09 21:07:23 richard Exp $
|
|
|
|
* XXXX
|
|
* `mode_t' is promoted to `int' when passed through `...'.
|
|
* Fix SunOS 64-bit.
|
|
* if SYS_open doesn't exist, use SYS_openat
|
|
|
|
--- libv4l2/v4l2convert.c.orig 2008-08-26 12:32:39.000000000 +0000
|
|
+++ libv4l2/v4l2convert.c
|
|
@@ -24,11 +24,16 @@
|
|
|
|
#include <stdarg.h>
|
|
#include <stdlib.h>
|
|
+#ifdef __linux__
|
|
#include <syscall.h>
|
|
+#else
|
|
+#include <sys/syscall.h>
|
|
+#endif
|
|
#include <fcntl.h>
|
|
#include <string.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/mman.h>
|
|
+#ifdef __linux__
|
|
/* 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>
|
|
@@ -36,8 +41,22 @@
|
|
#include <linux/ioctl.h>
|
|
/* end broken header workaround includes */
|
|
#include <linux/videodev2.h>
|
|
+#else
|
|
+#include <sys/types.h>
|
|
+#include <sys/time.h>
|
|
+#include <sys/ioctl.h>
|
|
+#ifdef __sun
|
|
+#include <sys/videodev2.h>
|
|
+#else
|
|
+#include <sys/videoio.h>
|
|
+#endif
|
|
+#endif
|
|
#include <libv4l2.h>
|
|
|
|
+#ifndef O_LARGEFILE
|
|
+#define O_LARGEFILE 0
|
|
+#endif
|
|
+
|
|
/* Check that open/read/mmap is not a define */
|
|
#if defined open || defined read || defined mmap
|
|
#error open/read/mmap is a prepocessor macro !!
|
|
@@ -61,13 +80,20 @@ LIBV4L_PUBLIC int open (const char *file
|
|
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
|
|
+#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)
|
|
@@ -92,6 +118,7 @@ LIBV4L_PUBLIC int open (const char *file
|
|
return fd;
|
|
}
|
|
|
|
+#if !(defined(__sun) && defined(_LP64))
|
|
LIBV4L_PUBLIC int open64(const char *file, int oflag, ...)
|
|
{
|
|
int fd;
|
|
@@ -114,6 +141,7 @@ LIBV4L_PUBLIC int open64(const char *fil
|
|
|
|
return fd;
|
|
}
|
|
+#endif
|
|
|
|
LIBV4L_PUBLIC int close(int fd)
|
|
{
|
|
@@ -137,22 +165,19 @@ LIBV4L_PUBLIC int ioctl (int fd, unsigne
|
|
return v4l2_ioctl (fd, request, arg);
|
|
}
|
|
|
|
-LIBV4L_PUBLIC ssize_t read (int fd, void* buffer, size_t n)
|
|
-{
|
|
- return v4l2_read (fd, buffer, n);
|
|
-}
|
|
-
|
|
LIBV4L_PUBLIC void *mmap(void *start, size_t length, int prot, int flags, int fd,
|
|
__off_t offset)
|
|
{
|
|
return v4l2_mmap(start, length, prot, flags, fd, offset);
|
|
}
|
|
|
|
+#if !(defined(__sun) && defined(_LP64))
|
|
LIBV4L_PUBLIC void *mmap64(void *start, size_t length, int prot, int flags, int fd,
|
|
__off64_t offset)
|
|
{
|
|
return v4l2_mmap(start, length, prot, flags, fd, offset);
|
|
}
|
|
+#endif
|
|
|
|
LIBV4L_PUBLIC int munmap(void *start, size_t length)
|
|
{
|