From 3c0b98dced394da30d96b94b61faa07574d97e33 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 23 Oct 2014 04:33:57 +0200 Subject: [PATCH] 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 --- libavutil/avstring.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 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; + const char *p, *q; - 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++; + 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; }