From dd04911c4e6dc2e1360b5b6960f0eab9f6fc6a28 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Fri, 1 May 2009 18:17:59 +0000 Subject: Make graphparser.c use av_get_token(). This also avoids the need for '\=' escaping. Originally committed as revision 18726 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavfilter/graphparser.c | 50 ++++------------------------------------------- 1 file changed, 4 insertions(+), 46 deletions(-) diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c index a51331fb22..9e4cd4373d 100644 --- a/libavfilter/graphparser.c +++ b/libavfilter/graphparser.c @@ -26,6 +26,7 @@ #include "graphparser.h" #include "avfilter.h" #include "avfiltergraph.h" +#include "parseutils.h" #define WHITESPACES " \n\t" @@ -43,49 +44,6 @@ static int link_filter(AVFilterContext *src, int srcpad, return 0; } -/** - * Consumes a string from *buf. - * @return a copy of the consumed string, which should be free'd after use - */ -static char *consume_string(const char **buf) -{ - char *out = av_malloc(strlen(*buf) + 1); - char *ret = out; - - *buf += strspn(*buf, WHITESPACES); - - do{ - char c = *(*buf)++; - switch (c) { - case '\\': - *out++ = *(*buf)++; - break; - case '\'': - while(**buf && **buf != '\'') - *out++ = *(*buf)++; - if(**buf) (*buf)++; - break; - case 0: - case ']': - case '[': - case '=': - case ',': - case ';': - case ' ': - case '\n': - *out++ = 0; - break; - default: - *out++ = c; - } - } while(out[-1]); - - (*buf)--; - *buf += strspn(*buf, WHITESPACES); - - return ret; -} - /** * Parse "[linkname]" * @param name a pointer (that need to be free'd after use) to the name between @@ -97,7 +55,7 @@ static char *parse_link_name(const char **buf, AVClass *log_ctx) char *name; (*buf)++; - name = consume_string(buf); + name = av_get_token(buf, "]"); if(!name[0]) { av_log(log_ctx, AV_LOG_ERROR, @@ -162,12 +120,12 @@ static AVFilterContext *parse_filter(const char **buf, AVFilterGraph *graph, int index, AVClass *log_ctx) { char *opts = NULL; - char *name = consume_string(buf); + char *name = av_get_token(buf, "=,"); AVFilterContext *ret; if(**buf == '=') { (*buf)++; - opts = consume_string(buf); + opts = av_get_token(buf, "[],\n"); } ret = create_filter(graph, index, name, opts, log_ctx); -- cgit v1.2.3