From 0d92b0d5f445d4f26fb9d9d7cbf83c415c8d2279 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Tue, 30 Sep 2014 19:00:52 +0200
Subject: [PATCH] avutil/avstring: Factor av_match_list() out

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
---
 doc/APIchanges       |  3 +++
 libavformat/format.c | 20 +++-----------------
 libavutil/avstring.c | 21 +++++++++++++++++++++
 libavutil/avstring.h |  7 +++++++
 libavutil/version.h  |  4 ++--
 5 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 7fadab30eb3..e3ae4e87e1b 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil:     2014-08-09
 
 API changes, most recent first:
 
+2014-10-02 - xxxxxxx - lavu 54.8.100 - avstring.h
+  Add av_match_list()
+
 2014-09-24 - xxxxxxx - libpostproc 53.1.100
   Add visualization support
 
diff --git a/libavformat/format.c b/libavformat/format.c
index 1026c8f7a72..2d56e6d5453 100644
--- a/libavformat/format.c
+++ b/libavformat/format.c
@@ -80,28 +80,14 @@ void av_register_output_format(AVOutputFormat *format)
 
 int av_match_ext(const char *filename, const char *extensions)
 {
-    const char *ext, *p;
-    char ext1[32], *q;
+    const char *ext;
 
     if (!filename)
         return 0;
 
     ext = strrchr(filename, '.');
-    if (ext) {
-        ext++;
-        p = extensions;
-        for (;;) {
-            q = ext1;
-            while (*p != '\0' && *p != ','  && q - ext1 < sizeof(ext1) - 1)
-                *q++ = *p++;
-            *q = '\0';
-            if (!av_strcasecmp(ext1, ext))
-                return 1;
-            if (*p == '\0')
-                break;
-            p++;
-        }
-    }
+    if (ext)
+        return av_match_list(ext + 1, extensions, ',');
     return 0;
 }
 
diff --git a/libavutil/avstring.c b/libavutil/avstring.c
index fd010e407c1..ac7f98ae74b 100644
--- a/libavutil/avstring.c
+++ b/libavutil/avstring.c
@@ -402,6 +402,27 @@ end:
     return ret;
 }
 
+int av_match_list(const char *name, const char *list, char separator)
+{
+    const char *p;
+    char ext1[128], *q;
+    int i;
+
+    p = list;
+    for (i = 1;; i++) {
+        q = ext1;
+        while (*p != '\0' && *p != separator  && q - ext1 < sizeof(ext1) - 1)
+            *q++ = *p++;
+        *q = '\0';
+        if (!av_strcasecmp(ext1, name))
+            return i;
+        if (*p == '\0')
+            break;
+        p++;
+    }
+    return 0;
+}
+
 #ifdef TEST
 
 int main(void)
diff --git a/libavutil/avstring.h b/libavutil/avstring.h
index 616c0662fc4..ea7d1dcb43b 100644
--- a/libavutil/avstring.h
+++ b/libavutil/avstring.h
@@ -357,6 +357,13 @@ int av_escape(char **dst, const char *src, const char *special_chars,
 int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end,
                    unsigned int flags);
 
+/**
+ * Check if a name is in a list.
+ * @returns 0 if not found, or the 1 based index where it has been found in the
+ *            list.
+ */
+int av_match_list(const char *name, const char *list, char separator);
+
 /**
  * @}
  */
diff --git a/libavutil/version.h b/libavutil/version.h
index 14242f9b1cb..9e138b5fabe 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -56,8 +56,8 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  54
-#define LIBAVUTIL_VERSION_MINOR   7
-#define LIBAVUTIL_VERSION_MICRO 101
+#define LIBAVUTIL_VERSION_MINOR   8
+#define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \
-- 
GitLab