]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Make graphparser.c use av_get_token().
authorstefano <stefano@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Fri, 1 May 2009 18:17:59 +0000 (18:17 +0000)
committerstefano <stefano@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Fri, 1 May 2009 18:17:59 +0000 (18:17 +0000)
This also avoids the need for '\=' escaping.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@18726 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavfilter/graphparser.c

index a51331fb22e09b871f44170250b063149c36678a..9e4cd4373d83ad8fa2411642a57712147d55e210 100644 (file)
@@ -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);