summaryrefslogtreecommitdiff
path: root/libavutil
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-10-23 04:33:57 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-10-23 04:35:24 +0200
commit3c0b98dced394da30d96b94b61faa07574d97e33 (patch)
tree2124d09af62db10286cf49cfd9e5dfb3e2cc8ddd /libavutil
parentcebe8c80956845c7ee3464d0fa1dcec78c60f9d6 (diff)
avutil/avstring: Reimplement av_match_list()
av_match_list() is only used for whitelists, fix it so it works with multi-named formats like "mov,mp4,m4a,3gp,3g2,mj2" Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/avstring.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/libavutil/avstring.c b/libavutil/avstring.c
index ac7f98ae74..413e140b57 100644
--- a/libavutil/avstring.c
+++ b/libavutil/avstring.c
@@ -404,22 +404,21 @@ end:
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++;
+ const char *p, *q;
+
+ for (p = name; p && *p; ) {
+ for (q = list; q && *q; ) {
+ int k;
+ for (k = 0; p[k] == q[k] || (p[k]*q[k] == 0 && p[k]+q[k] == ','); k++)
+ if (k && (!p[k] || p[k] == ','))
+ return 1;
+ q = strchr(q, ',');
+ q += !!q;
+ }
+ p = strchr(p, ',');
+ p += !!p;
}
+
return 0;
}