From 4a10eab0e31d69948161241b1801c41201a5d081 Mon Sep 17 00:00:00 2001 From: Khem Raj 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 --- 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 651917e..cea57b7 100644 --- a/utils/v4l2-ctl/v4l2-ctl-common.cpp +++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp @@ -782,15 +782,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, "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)