
git-svn-id: svn://svn.openwrt.org/openwrt/packages@17584 3c298f89-4303-0410-b956-a3cf2f4a3e73
44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
diff -ruN libv4l-0.6.0.orig/libv4lconvert/control/libv4lcontrol.c libv4l-0.6.0/libv4lconvert/control/libv4lcontrol.c
|
|
--- libv4l-0.6.0.orig/libv4lconvert/control/libv4lcontrol.c 2009-07-09 04:59:01.000000000 -0400
|
|
+++ libv4l-0.6.0/libv4lconvert/control/libv4lcontrol.c 2009-08-29 03:23:06.000000000 -0400
|
|
@@ -265,7 +265,7 @@
|
|
|
|
struct v4lcontrol_data *v4lcontrol_create(int fd, int always_needs_conversion)
|
|
{
|
|
- int shm_fd;
|
|
+ int shm_fd, fdflags;
|
|
int i, rc, init = 0;
|
|
char *s, shm_name[256];
|
|
struct v4l2_capability cap;
|
|
@@ -311,19 +311,26 @@
|
|
return data; /* No need to create a shared memory segment */
|
|
|
|
SYS_IOCTL(fd, VIDIOC_QUERYCAP, &cap);
|
|
- snprintf(shm_name, 256, "/%s:%s", cap.bus_info, cap.card);
|
|
+ snprintf(shm_name, 256, "/dev/shm/%s:%s", cap.bus_info, cap.card);
|
|
|
|
/* / is not allowed inside shm names */
|
|
- for (i = 1; shm_name[i]; i++)
|
|
+ for (i = 9; shm_name[i]; i++) //start after "/dev/shm", i = 9
|
|
if (shm_name[i] == '/')
|
|
shm_name[i] = '-';
|
|
|
|
/* Open the shared memory object identified by shm_name */
|
|
- if ((shm_fd = shm_open(shm_name, (O_CREAT | O_EXCL | O_RDWR),
|
|
+ if ((shm_fd = open(shm_name, (O_CREAT | O_EXCL | O_RDWR),
|
|
(S_IREAD | S_IWRITE))) >= 0)
|
|
init = 1;
|
|
- else if ((shm_fd = shm_open(shm_name, O_RDWR, (S_IREAD | S_IWRITE))) < 0)
|
|
+ else if ((shm_fd = open(shm_name, O_RDWR, (S_IREAD | S_IWRITE))) < 0)
|
|
goto error;
|
|
+
|
|
+ /* This is all uClibc > 0.9.30 seems to do for shm_open() in librt/shm.c */
|
|
+ fdflags = fcntl(shm_fd, F_GETFD, 0);
|
|
+
|
|
+ if (fdflags >= 0) {
|
|
+ fdflags = fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);
|
|
+ }
|
|
|
|
/* Set the shared memory size */
|
|
ftruncate(shm_fd, V4LCONTROL_SHM_SIZE);
|