aboutsummaryrefslogtreecommitdiffstats
path: root/community/v4l-utils/getsubopt.patch
blob: 8ac87a8c7a745d7e74c9971e4d8d2ff80d0e2e38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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.

--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
@@ -782,15 +782,17 @@
 
 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, "Missing suboption value\n");
-	return true;
+	while (*p && *p != ',')
+		p++;
+
+	if (*p)
+		*p++ = '\0';
+
+	*subs = p;
+	return false;
 }
 
 void common_cmd(const std::string &media_bus_info, int ch, char *optarg)