diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-10-23 04:33:57 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-10-23 04:35:24 +0200 |
commit | 3c0b98dced394da30d96b94b61faa07574d97e33 (patch) | |
tree | 2124d09af62db10286cf49cfd9e5dfb3e2cc8ddd /libavutil/avstring.c | |
parent | cebe8c80956845c7ee3464d0fa1dcec78c60f9d6 (diff) | |
download | ffmpeg-3c0b98dced394da30d96b94b61faa07574d97e33.tar.gz |
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/avstring.c')
-rw-r--r-- | libavutil/avstring.c | 29 |
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; } |