From e4582c11f76b9390a3e172dcf0741dca90a9dc8d Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 30 Nov 2019 18:50:34 -0800
Subject: [PATCH] Do not use getsubopt

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.

Imported from Alpine Linux

Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>

---
 utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
index c940171..49c0f39 100644
--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
@@ -956,15 +956,17 @@ static bool parse_subset(char *optarg)
 
 static bool parse_next_subopt(char **subs, char **value)
 {
-	static char *const subopts[] = {
-	    nullptr
-	};
-	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)
