This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: v4l-utils: use v4l_getsubopt instead of getsubopt
Author:  Hans Verkuil <[email protected]>
Date:    Thu Nov 25 10:59:22 2021 +0100

Android doesn't have getsubopt at all, and some libc implementations
use a getsubopt variant that behaves slightly different.

So add a new v4l-getsubopt.h header that either just uses the glibc
function (if glibc is detected) or uses a static inline v4l_getsubopt
that is copied from glibc. This should avoid such problems.

Reported-by: Marian Buschsieweke <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>

 android-config.h                          | 243 ----------------------------
 include/v4l-getsubopt.h                   | 259 ++++++++++++++++++++++++++++++
 utils/cx18-ctl/cx18-ctl.c                 |   3 +-
 utils/ivtv-ctl/ivtv-ctl.c                 |   5 +-
 utils/libcecutil/cec-parse.cpp            |   3 +-
 utils/rds-ctl/rds-ctl.cpp                 |   3 +-
 utils/v4l2-compliance/v4l2-compliance.cpp |   3 +-
 utils/v4l2-ctl/v4l2-ctl-common.cpp        |   2 +-
 utils/v4l2-ctl/v4l2-ctl-edid.cpp          |   2 +-
 utils/v4l2-ctl/v4l2-ctl-stds.cpp          |   2 +-
 utils/v4l2-ctl/v4l2-ctl.cpp               |   4 +-
 utils/v4l2-ctl/v4l2-ctl.h                 |   1 +
 utils/v4l2-dbg/v4l2-dbg.cpp               |   3 +-
 13 files changed, 278 insertions(+), 255 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=6e19bb895a16a9a247524ac526ab47f576cc36f6
diff --git a/android-config.h b/android-config.h
index 9f12b8fc9d24..bd4ef2fb54fa 100644
--- a/android-config.h
+++ b/android-config.h
@@ -117,247 +117,4 @@
 /* Define to `int' if <sys/types.h> does not define. */
 /* #undef mode_t */
 
-/*
- * Import strchrnul(...) from uClibc version 0.9.33.2 since this feature is
- * missing in the Android C library.
- */
-
-/* Copyright (C) 1991,93,94,95,96,97,99,2000 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Based on strlen implementation by Torbjorn Granlund ([email protected]),
-   with help from Dan Sahlin ([email protected]) and
-   bug fix and commentary by Jim Blandy ([email protected]);
-   adaptation to strchr suggested by Dick Karpinski ([email protected]),
-   and implemented by Roland McGrath ([email protected]).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <string.h>
-#include <stdlib.h>
-
-/* Find the first occurrence of C in S or the final NUL byte.  */
-static inline char *strchrnul (const char *s, int c_in)
-{
-  const unsigned char *char_ptr;
-  const unsigned long int *longword_ptr;
-  unsigned long int longword, magic_bits, charmask;
-  unsigned char c;
-
-  c = (unsigned char) c_in;
-
-  /* Handle the first few characters by reading one character at a time.
-     Do this until CHAR_PTR is aligned on a longword boundary.  */
-  for (char_ptr = (const unsigned char *) s;
-       ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
-       ++char_ptr)
-    if (*char_ptr == c || *char_ptr == '\0')
-      return (char *) char_ptr;
-
-  /* All these elucidatory comments refer to 4-byte longwords,
-     but the theory applies equally well to 8-byte longwords.  */
-
-  longword_ptr = (unsigned long int *) char_ptr;
-
-  /* Bits 31, 24, 16, and 8 of this number are zero.  Call these bits
-     the "holes."  Note that there is a hole just to the left of
-     each byte, with an extra at the end:
-
-     bits:  01111110 11111110 11111110 11111111
-     bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
-
-     The 1-bits make sure that carries propagate to the next 0-bit.
-     The 0-bits provide holes for carries to fall into.  */
-  switch (sizeof (longword))
-    {
-    case 4: magic_bits = 0x7efefeffL; break;
-    case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
-    default:
-      abort ();
-    }
-
-  /* Set up a longword, each of whose bytes is C.  */
-  charmask = c | (c << 8);
-  charmask |= charmask << 16;
-  if (sizeof (longword) > 4)
-    /* Do the shift in two steps to avoid a warning if long has 32 bits.  */
-    charmask |= (charmask << 16) << 16;
-  if (sizeof (longword) > 8)
-    abort ();
-
-  /* Instead of the traditional loop which tests each character,
-     we will test a longword at a time.  The tricky part is testing
-     if *any of the four* bytes in the longword in question are zero.  */
-  for (;;)
-    {
-      /* We tentatively exit the loop if adding MAGIC_BITS to
-        LONGWORD fails to change any of the hole bits of LONGWORD.
-
-        1) Is this safe?  Will it catch all the zero bytes?
-        Suppose there is a byte with all zeros.  Any carry bits
-        propagating from its left will fall into the hole at its
-        least significant bit and stop.  Since there will be no
-        carry from its most significant bit, the LSB of the
-        byte to the left will be unchanged, and the zero will be
-        detected.
-
-        2) Is this worthwhile?  Will it ignore everything except
-        zero bytes?  Suppose every byte of LONGWORD has a bit set
-        somewhere.  There will be a carry into bit 8.  If bit 8
-        is set, this will carry into bit 16.  If bit 8 is clear,
-        one of bits 9-15 must be set, so there will be a carry
-        into bit 16.  Similarly, there will be a carry into bit
-        24.  If one of bits 24-30 is set, there will be a carry
-        into bit 31, so all of the hole bits will be changed.
-
-        The one misfire occurs when bits 24-30 are clear and bit
-        31 is set; in this case, the hole at bit 31 is not
-        changed.  If we had access to the processor carry flag,
-        we could close this loophole by putting the fourth hole
-        at bit 32!
-
-        So it ignores everything except 128's, when they're aligned
-        properly.
-
-        3) But wait!  Aren't we looking for C as well as zero?
-        Good point.  So what we do is XOR LONGWORD with a longword,
-        each of whose bytes is C.  This turns each byte that is C
-        into a zero.  */
-
-      longword = *longword_ptr++;
-
-      /* Add MAGIC_BITS to LONGWORD.  */
-      if ((((longword + magic_bits)
-
-           /* Set those bits that were unchanged by the addition.  */
-           ^ ~longword)
-
-          /* Look at only the hole bits.  If any of the hole bits
-             are unchanged, most likely one of the bytes was a
-             zero.  */
-          & ~magic_bits) != 0 ||
-
-         /* That caught zeroes.  Now test for C.  */
-         ((((longword ^ charmask) + magic_bits) ^ ~(longword ^ charmask))
-          & ~magic_bits) != 0)
-       {
-         /* Which of the bytes was C or zero?
-            If none of them were, it was a misfire; continue the search.  */
-
-         const unsigned char *cp = (const unsigned char *) (longword_ptr - 1);
-
-         if (*cp == c || *cp == '\0')
-           return (char *) cp;
-         if (*++cp == c || *cp == '\0')
-           return (char *) cp;
-         if (*++cp == c || *cp == '\0')
-           return (char *) cp;
-         if (*++cp == c || *cp == '\0')
-           return (char *) cp;
-         if (sizeof (longword) > 4)
-           {
-             if (*++cp == c || *cp == '\0')
-               return (char *) cp;
-             if (*++cp == c || *cp == '\0')
-               return (char *) cp;
-             if (*++cp == c || *cp == '\0')
-               return (char *) cp;
-             if (*++cp == c || *cp == '\0')
-               return (char *) cp;
-           }
-       }
-    }
-
-  /* This should never happen.  */
-  return NULL;
-}
-
-/*
- * Import getsubopt(...) from uClibc version 0.9.33.2 since this feature is
- * missing in the Android C library.
- */
-
-/* Parse comma separate list into words.
-   Copyright (C) 1996, 1997, 1999, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <[email protected]>, 1996.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdlib.h>
-#include <string.h>
-
-/* Parse comma separated suboption from *OPTIONP and match against
-   strings in TOKENS.  If found return index and set *VALUEP to
-   optional value introduced by an equal sign.  If the suboption is
-   not part of TOKENS return in *VALUEP beginning of unknown
-   suboption.  On exit *OPTIONP is set to the beginning of the next
-   token or at the terminating NUL character.  */
-static inline int
-getsubopt (char **optionp, char *const *tokens, char **valuep)
-{
-  char *endp, *vstart;
-  int cnt;
-
-  if (**optionp == '\0')
-    return -1;
-
-  /* Find end of next token.  */
-  endp = strchrnul (*optionp, ',');
-
-  /* Find start of value.  */
-  vstart = (char *) memchr (*optionp, '=', endp - *optionp);
-  if (vstart == NULL)
-    vstart = endp;
-
-  /* Try to match the characters between *OPTIONP and VSTART against
-     one of the TOKENS.  */
-  for (cnt = 0; tokens[cnt] != NULL; ++cnt)
-    if (strncmp (*optionp, tokens[cnt], vstart - *optionp) == 0
-       && tokens[cnt][vstart - *optionp] == '\0')
-      {
-       /* We found the current option in TOKENS.  */
-       *valuep = vstart != endp ? vstart + 1 : NULL;
-
-       if (*endp != '\0')
-         *endp++ = '\0';
-       *optionp = endp;
-
-       return cnt;
-      }
-
-  /* The current suboption does not match any option.  */
-  *valuep = *optionp;
-
-  if (*endp != '\0')
-    *endp++ = '\0';
-  *optionp = endp;
-
-  return -1;
-}
 #endif
diff --git a/include/v4l-getsubopt.h b/include/v4l-getsubopt.h
new file mode 100644
index 000000000000..60e7b9767ab8
--- /dev/null
+++ b/include/v4l-getsubopt.h
@@ -0,0 +1,259 @@
+#ifndef __V4L_GETSUBOPT__
+#define __V4L_GETSUBOPT__
+
+/*
+ * Apparently non-glibc variants of getsubopt behave slightly
+ * differently, and on some OSes (Android) it is missing altogether.
+ * So add support for it here, if needed.
+ */
+
+#if defined(__GLIBC__)
+
+#define v4l_getsubopt getsubopt
+
+#else
+
+/*
+ * Import strchrnul(...) from uClibc version 0.9.33.2 since this feature is
+ * missing in the Android C library.
+ */
+
+/* Copyright (C) 1991,93,94,95,96,97,99,2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Based on strlen implementation by Torbjorn Granlund ([email protected]),
+   with help from Dan Sahlin ([email protected]) and
+   bug fix and commentary by Jim Blandy ([email protected]);
+   adaptation to strchr suggested by Dick Karpinski ([email protected]),
+   and implemented by Roland McGrath ([email protected]).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <string.h>
+#include <stdlib.h>
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+static inline char *v4l_strchrnul (const char *s, int c_in)
+{
+  const unsigned char *char_ptr;
+  const unsigned long int *longword_ptr;
+  unsigned long int longword, magic_bits, charmask;
+  unsigned char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few characters by reading one character at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
+       ++char_ptr)
+    if (*char_ptr == c || *char_ptr == '\0')
+      return (char *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to 8-byte longwords.  */
+
+  longword_ptr = (unsigned long int *) char_ptr;
+
+  /* Bits 31, 24, 16, and 8 of this number are zero.  Call these bits
+     the "holes."  Note that there is a hole just to the left of
+     each byte, with an extra at the end:
+
+     bits:  01111110 11111110 11111110 11111111
+     bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
+
+     The 1-bits make sure that carries propagate to the next 0-bit.
+     The 0-bits provide holes for carries to fall into.  */
+  switch (sizeof (longword))
+    {
+    case 4: magic_bits = 0x7efefeffL; break;
+    case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+    default:
+      abort ();
+    }
+
+  /* Set up a longword, each of whose bytes is C.  */
+  charmask = c | (c << 8);
+  charmask |= charmask << 16;
+  if (sizeof (longword) > 4)
+    /* Do the shift in two steps to avoid a warning if long has 32 bits.  */
+    charmask |= (charmask << 16) << 16;
+  if (sizeof (longword) > 8)
+    abort ();
+
+  /* Instead of the traditional loop which tests each character,
+     we will test a longword at a time.  The tricky part is testing
+     if *any of the four* bytes in the longword in question are zero.  */
+  for (;;)
+    {
+      /* We tentatively exit the loop if adding MAGIC_BITS to
+        LONGWORD fails to change any of the hole bits of LONGWORD.
+
+        1) Is this safe?  Will it catch all the zero bytes?
+        Suppose there is a byte with all zeros.  Any carry bits
+        propagating from its left will fall into the hole at its
+        least significant bit and stop.  Since there will be no
+        carry from its most significant bit, the LSB of the
+        byte to the left will be unchanged, and the zero will be
+        detected.
+
+        2) Is this worthwhile?  Will it ignore everything except
+        zero bytes?  Suppose every byte of LONGWORD has a bit set
+        somewhere.  There will be a carry into bit 8.  If bit 8
+        is set, this will carry into bit 16.  If bit 8 is clear,
+        one of bits 9-15 must be set, so there will be a carry
+        into bit 16.  Similarly, there will be a carry into bit
+        24.  If one of bits 24-30 is set, there will be a carry
+        into bit 31, so all of the hole bits will be changed.
+
+        The one misfire occurs when bits 24-30 are clear and bit
+        31 is set; in this case, the hole at bit 31 is not
+        changed.  If we had access to the processor carry flag,
+        we could close this loophole by putting the fourth hole
+        at bit 32!
+
+        So it ignores everything except 128's, when they're aligned
+        properly.
+
+        3) But wait!  Aren't we looking for C as well as zero?
+        Good point.  So what we do is XOR LONGWORD with a longword,
+        each of whose bytes is C.  This turns each byte that is C
+        into a zero.  */
+
+      longword = *longword_ptr++;
+
+      /* Add MAGIC_BITS to LONGWORD.  */
+      if ((((longword + magic_bits)
+
+           /* Set those bits that were unchanged by the addition.  */
+           ^ ~longword)
+
+          /* Look at only the hole bits.  If any of the hole bits
+             are unchanged, most likely one of the bytes was a
+             zero.  */
+          & ~magic_bits) != 0 ||
+
+         /* That caught zeroes.  Now test for C.  */
+         ((((longword ^ charmask) + magic_bits) ^ ~(longword ^ charmask))
+          & ~magic_bits) != 0)
+       {
+         /* Which of the bytes was C or zero?
+            If none of them were, it was a misfire; continue the search.  */
+
+         const unsigned char *cp = (const unsigned char *) (longword_ptr - 1);
+
+         if (*cp == c || *cp == '\0')
+           return (char *) cp;
+         if (*++cp == c || *cp == '\0')
+           return (char *) cp;
+         if (*++cp == c || *cp == '\0')
+           return (char *) cp;
+         if (*++cp == c || *cp == '\0')
+           return (char *) cp;
+         if (sizeof (longword) > 4)
+           {
+             if (*++cp == c || *cp == '\0')
+               return (char *) cp;
+             if (*++cp == c || *cp == '\0')
+               return (char *) cp;
+             if (*++cp == c || *cp == '\0')
+               return (char *) cp;
+             if (*++cp == c || *cp == '\0')
+               return (char *) cp;
+           }
+       }
+    }
+
+  /* This should never happen.  */
+  return NULL;
+}
+
+/*
+ * Import getsubopt(...) from uClibc version 0.9.33.2 since this feature is
+ * missing in the Android C library.
+ */
+
+/* Parse comma separate list into words.
+   Copyright (C) 1996, 1997, 1999, 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <[email protected]>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* Parse comma separated suboption from *OPTIONP and match against
+   strings in TOKENS.  If found return index and set *VALUEP to
+   optional value introduced by an equal sign.  If the suboption is
+   not part of TOKENS return in *VALUEP beginning of unknown
+   suboption.  On exit *OPTIONP is set to the beginning of the next
+   token or at the terminating NUL character.  */
+static inline int
+v4l_getsubopt (char **optionp, char *const *tokens, char **valuep)
+{
+  char *endp, *vstart;
+  int cnt;
+
+  if (**optionp == '\0')
+    return -1;
+
+  /* Find end of next token.  */
+  endp = v4l_strchrnul (*optionp, ',');
+
+  /* Find start of value.  */
+  vstart = (char *) memchr (*optionp, '=', endp - *optionp);
+  if (vstart == NULL)
+    vstart = endp;
+
+  /* Try to match the characters between *OPTIONP and VSTART against
+     one of the TOKENS.  */
+  for (cnt = 0; tokens[cnt] != NULL; ++cnt)
+    if (strncmp (*optionp, tokens[cnt], vstart - *optionp) == 0
+       && tokens[cnt][vstart - *optionp] == '\0')
+      {
+       /* We found the current option in TOKENS.  */
+       *valuep = vstart != endp ? vstart + 1 : NULL;
+
+       if (*endp != '\0')
+         *endp++ = '\0';
+       *optionp = endp;
+
+       return cnt;
+      }
+
+  /* The current suboption does not match any option.  */
+  *valuep = *optionp;
+
+  if (*endp != '\0')
+    *endp++ = '\0';
+  *optionp = endp;
+
+  return -1;
+}
+
+#endif
+
+#endif
diff --git a/utils/cx18-ctl/cx18-ctl.c b/utils/cx18-ctl/cx18-ctl.c
index bf8ee967080d..16a2c82f839b 100644
--- a/utils/cx18-ctl/cx18-ctl.c
+++ b/utils/cx18-ctl/cx18-ctl.c
@@ -36,6 +36,7 @@
 #include <math.h>
 
 #include <linux/videodev2.h>
+#include <v4l-getsubopt.h>
 
 /* copied from cx18-driver.h */
 #define CX18_DBGFLG_WARN  (1 << 0)
@@ -279,7 +280,7 @@ int main(int argc, char **argv)
                case OptSetGPIO:
                        subs = optarg;
                        while (*subs != '\0') {
-                               switch (getsubopt(&subs, subopts, &value)) {
+                               switch (v4l_getsubopt(&subs, subopts, &value)) {
                                case SUB_DIR:
                                        if (value == NULL) {
                                                fprintf(stderr,
diff --git a/utils/ivtv-ctl/ivtv-ctl.c b/utils/ivtv-ctl/ivtv-ctl.c
index 9923827e2680..b42b348900d7 100644
--- a/utils/ivtv-ctl/ivtv-ctl.c
+++ b/utils/ivtv-ctl/ivtv-ctl.c
@@ -35,6 +35,7 @@
 #include <math.h>
 
 #include <linux/videodev2.h>
+#include <v4l-getsubopt.h>
 
 /* copied from ivtv-driver.h */
 #define IVTV_DBGFLG_WARN    (1 << 0)
@@ -316,7 +317,7 @@ int main(int argc, char **argv)
                    {
                        subs = optarg;
                        while (*subs != '\0') {
-                               switch (getsubopt(&subs, subopts, &value)) {
+                               switch (v4l_getsubopt(&subs, subopts, &value)) {
                                case SUB_YUV_MODE:
                                        if (value == NULL) {
                                                fprintf(stderr,
@@ -360,7 +361,7 @@ int main(int argc, char **argv)
                case OptSetGPIO:
                        subs = optarg;
                        while (*subs != '\0') {
-                               switch (getsubopt(&subs, subopts, &value)) {
+                               switch (v4l_getsubopt(&subs, subopts, &value)) {
                                case SUB_DIR:
                                        if (value == NULL) {
                                                fprintf(stderr,
diff --git a/utils/libcecutil/cec-parse.cpp b/utils/libcecutil/cec-parse.cpp
index fd37f5b83c47..aa7031369791 100644
--- a/utils/libcecutil/cec-parse.cpp
+++ b/utils/libcecutil/cec-parse.cpp
@@ -10,6 +10,7 @@
 #include <unistd.h>
 
 #include <linux/cec-funcs.h>
+#include <v4l-getsubopt.h>
 #include "cec-htng-funcs.h"
 #include "cec-log.h"
 #include "cec-parse.h"
@@ -147,7 +148,7 @@ static __u8 *args2short_aud_fmt_codes(__u8 
audio_format_code1,
 
 int cec_parse_subopt(char **subs, const char * const *subopts, char **value)
 {
-       int opt = getsubopt(subs, const_cast<char * const *>(subopts), value);
+       int opt = v4l_getsubopt(subs, const_cast<char * const *>(subopts), 
value);
 
        if (opt == -1) {
                fprintf(stderr, "Invalid suboptions specified\n");
diff --git a/utils/rds-ctl/rds-ctl.cpp b/utils/rds-ctl/rds-ctl.cpp
index 80a9396abf0b..2a17b43048e4 100644
--- a/utils/rds-ctl/rds-ctl.cpp
+++ b/utils/rds-ctl/rds-ctl.cpp
@@ -26,6 +26,7 @@
 
 #include <linux/videodev2.h>
 #include <libv4l2rds.h>
+#include <v4l-getsubopt.h>
 
 using dev_vec = std::vector<std::string>;
 using dev_map = std::map<std::string, std::string>;
@@ -362,7 +363,7 @@ static dev_vec list_devices()
 
 static int parse_subopt(char **subs, const char * const *subopts, char **value)
 {
-       int opt = getsubopt(subs, const_cast<char * const *>(subopts), value);
+       int opt = v4l_getsubopt(subs, const_cast<char * const *>(subopts), 
value);
 
        if (opt == -1) {
                fprintf(stderr, "Invalid suboptions specified\n");
diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp 
b/utils/v4l2-compliance/v4l2-compliance.cpp
index e4f291307933..0eeabb2db8c8 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -32,6 +32,7 @@
 
 #include "v4l2-compliance.h"
 #include <media-info.h>
+#include <v4l-getsubopt.h>
 
 /* Short option list
 
@@ -820,7 +821,7 @@ static void streamingSetup(struct node *node)
 
 static int parse_subopt(char **subs, const char * const *subopts, char **value)
 {
-       int opt = getsubopt(subs, const_cast<char * const *>(subopts), value);
+       int opt = v4l_getsubopt(subs, const_cast<char * const *>(subopts), 
value);
 
        if (opt == -1) {
                fprintf(stderr, "Invalid suboptions specified\n");
diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp 
b/utils/v4l2-ctl/v4l2-ctl-common.cpp
index 44f2f274cbfc..89a9553db466 100644
--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
@@ -962,7 +962,7 @@ static bool parse_next_subopt(char **subs, char **value)
        static char *const subopts[] = {
            nullptr
        };
-       int opt = getsubopt(subs, subopts, value);
+       int opt = v4l_getsubopt(subs, subopts, value);
 
        if (opt < 0 || *value)
                return false;
diff --git a/utils/v4l2-ctl/v4l2-ctl-edid.cpp b/utils/v4l2-ctl/v4l2-ctl-edid.cpp
index c3a4a28a10ff..96659377853f 100644
--- a/utils/v4l2-ctl/v4l2-ctl-edid.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-edid.cpp
@@ -1150,7 +1150,7 @@ void edid_cmd(int ch, char *optarg)
                                nullptr
                        };
 
-                       int opt = getsubopt(&subs, (char* const*)subopts, 
&value);
+                       int opt = v4l_getsubopt(&subs, (char* const*)subopts, 
&value);
 
                        if (opt == -1) {
                                fprintf(stderr, "Invalid suboptions 
specified\n");
diff --git a/utils/v4l2-ctl/v4l2-ctl-stds.cpp b/utils/v4l2-ctl/v4l2-ctl-stds.cpp
index 08154df452eb..6b596d00b37e 100644
--- a/utils/v4l2-ctl/v4l2-ctl-stds.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-stds.cpp
@@ -185,7 +185,7 @@ static int parse_timing_subopt(char **subopt_str, int 
*value)
                nullptr
        };
 
-       opt = getsubopt(subopt_str, (char* const*) subopt_list, &opt_str);
+       opt = v4l_getsubopt(subopt_str, (char* const*) subopt_list, &opt_str);
 
        if (opt == -1) {
                fprintf(stderr, "Invalid suboptions specified\n");
diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
index d7f8fe23b92a..764a7c716159 100644
--- a/utils/v4l2-ctl/v4l2-ctl.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl.cpp
@@ -347,7 +347,7 @@ static bool is_rgb_or_hsv(__u32 pixelformat)
        case V4L2_PIX_FMT_YUV410:
        case V4L2_PIX_FMT_YUV420:
        case V4L2_PIX_FMT_HI240:
-       case V4L2_PIX_FMT_HM12:
+       case V4L2_PIX_FMT_NV12_16L16:
        case V4L2_PIX_FMT_M420:
        case V4L2_PIX_FMT_NV12:
        case V4L2_PIX_FMT_NV21:
@@ -663,7 +663,7 @@ void print_video_formats_ext(cv4l_fd &fd, __u32 type, 
unsigned int mbus_code)
 
 int parse_subopt(char **subs, const char * const *subopts, char **value)
 {
-       int opt = getsubopt(subs, const_cast<char * const *>(subopts), value);
+       int opt = v4l_getsubopt(subs, const_cast<char * const *>(subopts), 
value);
 
        if (opt == -1) {
                fprintf(stderr, "Invalid suboptions specified\n");
diff --git a/utils/v4l2-ctl/v4l2-ctl.h b/utils/v4l2-ctl/v4l2-ctl.h
index 24eee3d747d8..39161466df13 100644
--- a/utils/v4l2-ctl/v4l2-ctl.h
+++ b/utils/v4l2-ctl/v4l2-ctl.h
@@ -9,6 +9,7 @@
 
 #include <linux/videodev2.h>
 #include <linux/v4l2-subdev.h>
+#include <v4l-getsubopt.h>
 
 #include <v4l2-info.h>
 
diff --git a/utils/v4l2-dbg/v4l2-dbg.cpp b/utils/v4l2-dbg/v4l2-dbg.cpp
index d711c9e4f0f8..98064fa28705 100644
--- a/utils/v4l2-dbg/v4l2-dbg.cpp
+++ b/utils/v4l2-dbg/v4l2-dbg.cpp
@@ -38,6 +38,7 @@
 #endif
 
 #include <linux/videodev2.h>
+#include <v4l-getsubopt.h>
 
 #include "v4l2-dbg-bttv.h"
 #include "v4l2-dbg-saa7134.h"
@@ -364,7 +365,7 @@ static int doioctl(int fd, unsigned long int request, void 
*parm, const char *na
 
 static int parse_subopt(char **subs, const char * const *subopts, char **value)
 {
-       int opt = getsubopt(subs, const_cast<char * const *>(subopts), value);
+       int opt = v4l_getsubopt(subs, const_cast<char * const *>(subopts), 
value);
 
        if (opt == -1) {
                fprintf(stderr, "Invalid suboptions specified\n");

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to