diff options
Diffstat (limited to 'extra/v4l-utils')
-rw-r--r-- | extra/v4l-utils/fix_parse_next_subopt.patch | 36 | ||||
-rw-r--r-- | extra/v4l-utils/types.patch | 26 |
2 files changed, 62 insertions, 0 deletions
diff --git a/extra/v4l-utils/fix_parse_next_subopt.patch b/extra/v4l-utils/fix_parse_next_subopt.patch new file mode 100644 index 0000000..d4df9d4 --- /dev/null +++ b/extra/v4l-utils/fix_parse_next_subopt.patch @@ -0,0 +1,36 @@ +parse_next_subopt() relies on undefined behavior and only works with glibc's +implementation of getsubopt(). This fixes the issue. +--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp 2021-11-08 11:23:39.079748359 +0100 ++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp 2021-11-08 11:39:49.328576794 +0100 +@@ -956,15 +956,23 @@ 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 *start = *subs; ++ if (!start || (start[0] == '\0')) { ++ fprintf(stderr, "Missing suboption value\n"); ++ return true; ++ } ++ *value = start; + +- if (opt < 0 || *value) +- return false; +- fprintf(stderr, "Missing suboption value\n"); +- return true; ++ char *sep = std::strchr(start, ','); ++ if (sep != nullptr) { ++ *sep = '\0'; ++ *subs = sep + 1; ++ } ++ else { ++ *subs = std::strchr(start, '\0'); ++ } ++ ++ return false; + } + + void common_cmd(const std::string &media_bus_info, int ch, char *optarg) diff --git a/extra/v4l-utils/types.patch b/extra/v4l-utils/types.patch new file mode 100644 index 0000000..340bb81 --- /dev/null +++ b/extra/v4l-utils/types.patch @@ -0,0 +1,26 @@ +--- a/utils/keytable/keymap.h ++++ b/utils/keytable/keymap.h +@@ -2,6 +2,10 @@ + #ifndef __KEYMAP_H + #define __KEYMAP_H + ++#include <stdint.h> ++typedef uint32_t u_int32_t; ++typedef int error_t; ++ + struct keymap { + struct keymap *next; + char *name; +--- a/utils/ir-ctl/keymap.h ++++ b/utils/ir-ctl/keymap.h +@@ -2,6 +2,10 @@ + #ifndef __KEYMAP_H + #define __KEYMAP_H + ++#include <stdint.h> ++typedef uint32_t u_int32_t; ++typedef int error_t; ++ + struct keymap { + struct keymap *next; + char *name; |