blob: e3ce45d1673e8b1c1f29d51c7a2bd63d2bf7288e [file] [log] [blame]
Brad Bishope42b3e32020-01-15 22:08:42 -05001From 4a10eab0e31d69948161241b1801c41201a5d081 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 30 Nov 2019 18:50:34 -0800
4Subject: [PATCH] Do not use getsubopt
5
6POSIX says that behavior when subopts list is empty is undefined.
7musl libs will set value to NULL which leads to crash.
8
9Simply avoid getsubopt, since we cannot rely on it.
10
11Imported from Alpine Linux
12
13Upstream-Status: Pending
14Signed-off-by: Khem Raj <raj.khem@gmail.com>
15---
16 utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
17 1 file changed, 10 insertions(+), 8 deletions(-)
18
19diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
20index 651917e..cea57b7 100644
21--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
22+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
Andrew Geissler97771a32021-03-05 15:23:11 -060023@@ -785,15 +785,17 @@ static bool parse_subset(char *optarg)
Brad Bishope42b3e32020-01-15 22:08:42 -050024
25 static bool parse_next_subopt(char **subs, char **value)
26 {
27- static char *const subopts[] = {
28- NULL
29- };
30- int opt = getsubopt(subs, subopts, value);
31+ char *p = *subs;
32+ *value = *subs;
33
34- if (opt < 0 || *value)
35- return false;
36- fprintf(stderr, "Missing suboption value\n");
37- return true;
38+ while (*p && *p != ',')
39+ p++;
40+
41+ if (*p)
42+ *p++ = '\0';
43+
44+ *subs = p;
45+ return false;
46 }
47
48 void common_cmd(const std::string &media_bus_info, int ch, char *optarg)