summaryrefslogtreecommitdiff
path: root/user/v4l-utils/getsubopt.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2018-07-18 23:50:41 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2018-07-18 23:50:41 -0500
commit5ca899dea9665001cbe401fbdc0c63364e434019 (patch)
treece35eacf72219c139dd5ba0adf8622196766b9d0 /user/v4l-utils/getsubopt.patch
parent26310cd455ee446af79dae44cd1a845df6d3794d (diff)
downloadpackages-5ca899dea9665001cbe401fbdc0c63364e434019.tar.gz
packages-5ca899dea9665001cbe401fbdc0c63364e434019.tar.bz2
packages-5ca899dea9665001cbe401fbdc0c63364e434019.tar.xz
packages-5ca899dea9665001cbe401fbdc0c63364e434019.zip
user/v4l-utils: pull in, bump to 1.14.2, fix
Diffstat (limited to 'user/v4l-utils/getsubopt.patch')
-rw-r--r--user/v4l-utils/getsubopt.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/user/v4l-utils/getsubopt.patch b/user/v4l-utils/getsubopt.patch
new file mode 100644
index 000000000..c476e5ed7
--- /dev/null
+++ b/user/v4l-utils/getsubopt.patch
@@ -0,0 +1,36 @@
+POSIX says that behavior when subopts list is empty is undefined.
+musl libs will set value to NULL which leads to crash.
+
+Simply avoid getsubopt, since we cannot rely on it.
+
+diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+index 3ea6cd3..291fb3e 100644
+--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+@@ -692,16 +692,17 @@ static bool parse_subset(char *optarg)
+
+ static bool parse_next_subopt(char **subs, char **value)
+ {
+- static char *const subopts[] = {
+- NULL
+- };
+- int opt = getsubopt(subs, subopts, value);
++ char *p = *subs;
++ *value = *subs;
+
+- if (opt < 0 || *value)
+- return false;
+- fprintf(stderr, "No value given to suboption <%s>\n",
+- subopts[opt]);
+- return true;
++ while (*p && *p != ',')
++ p++;
++
++ if (*p)
++ *p++ = '\0';
++
++ *subs = p;
++ return false;
+ }
+
+ void common_cmd(int ch, char *optarg)