$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 #include +#ifdef __linux__ #include +#else +#include +#endif #include #include #include #include +#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 @@ -36,8 +41,22 @@ #include /* end broken header workaround includes */ #include +#else +#include +#include +#include +#ifdef __sun +#include +#else +#include +#endif +#endif #include +#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) {