v4l-utils: Update to 1.16.5
[feed/packages.git] / libs / libv4l / patches / 030-getsubopt.patch
diff --git a/libs/libv4l/patches/030-getsubopt.patch b/libs/libv4l/patches/030-getsubopt.patch
new file mode 100644 (file)
index 0000000..c476e5e
--- /dev/null
@@ -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)