From 372e2884089e6a17be6d0028386ea2099dd86268 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Mon, 27 Sep 2010 16:23:43 +0000 Subject: Move av_get_token() from libavfilter to libavutil. Originally committed as revision 25225 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavfilter/avfilter.h | 2 +- libavfilter/graphparser.c | 1 + libavfilter/parseutils.c | 71 -------------------------------------- libavfilter/parseutils.h | 15 -------- libavfilter/vf_frei0r.c | 1 + libavutil/avstring.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++ libavutil/avstring.h | 16 +++++++++ libavutil/avutil.h | 2 +- 8 files changed, 108 insertions(+), 88 deletions(-) diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 05ef354521..99a3d8c6d7 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -26,7 +26,7 @@ #define LIBAVFILTER_VERSION_MAJOR 1 #define LIBAVFILTER_VERSION_MINOR 46 -#define LIBAVFILTER_VERSION_MICRO 0 +#define LIBAVFILTER_VERSION_MICRO 1 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c index c4f621b87e..fab0423698 100644 --- a/libavfilter/graphparser.c +++ b/libavfilter/graphparser.c @@ -23,6 +23,7 @@ #include #include +#include "libavutil/avstring.h" #include "graphparser.h" #include "avfilter.h" #include "avfiltergraph.h" diff --git a/libavfilter/parseutils.c b/libavfilter/parseutils.c index 669ec9d298..b7b8d13b94 100644 --- a/libavfilter/parseutils.c +++ b/libavfilter/parseutils.c @@ -28,42 +28,6 @@ #include "libavutil/random_seed.h" #include "parseutils.h" -#define WHITESPACES " \n\t" - -char *av_get_token(const char **buf, const char *term) -{ - char *out = av_malloc(strlen(*buf) + 1); - char *ret= out, *end= out; - const char *p = *buf; - if (!out) return NULL; - p += strspn(p, WHITESPACES); - - while(*p && !strspn(p, term)) { - char c = *p++; - if(c == '\\' && *p){ - *out++ = *p++; - end= out; - }else if(c == '\''){ - while(*p && *p != '\'') - *out++ = *p++; - if(*p){ - p++; - end= out; - } - }else{ - *out++ = c; - } - } - - do{ - *out-- = 0; - }while(out >= end && strspn(out, WHITESPACES)); - - *buf = p; - - return ret; -} - typedef struct { const char *name; ///< a string representing the name of the color uint8_t rgb_color[3]; ///< RGB values for the color @@ -395,41 +359,6 @@ int main(void) { int i; - const char *strings[] = { - "''", - "", - ":", - "\\", - "'", - " '' :", - " '' '' :", - "foo '' :", - "'foo'", - "foo ", - "foo\\", - "foo': blah:blah", - "foo\\: blah:blah", - "foo\'", - "'foo : ' :blahblah", - "\\ :blah", - " foo", - " foo ", - " foo \\ ", - "foo ':blah", - " foo bar : blahblah", - "\\f\\o\\o", - "'foo : \\ \\ ' : blahblah", - "'\\fo\\o:': blahblah", - "\\'fo\\o\\:': foo ' :blahblah" - }; - - for (i=0; i < FF_ARRAY_ELEMS(strings); i++) { - const char *p= strings[i]; - printf("|%s|", p); - printf(" -> |%s|", av_get_token(&p, ":")); - printf(" + |%s|\n", p); - } - printf("\nTesting av_parse_color()\n"); { uint8_t rgba[4]; diff --git a/libavfilter/parseutils.h b/libavfilter/parseutils.h index a139c952ab..59c52627a9 100644 --- a/libavfilter/parseutils.h +++ b/libavfilter/parseutils.h @@ -27,21 +27,6 @@ #include "libavutil/opt.h" -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - /** * Put the RGBA values that correspond to color_string in rgba_color. * diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c index 4ad7125875..1303b03c87 100644 --- a/libavfilter/vf_frei0r.c +++ b/libavfilter/vf_frei0r.c @@ -26,6 +26,7 @@ #include #include +#include "libavutil/avstring.h" #include "avfilter.h" #include "parseutils.h" diff --git a/libavutil/avstring.c b/libavutil/avstring.c index 4844e28db2..b573dd6761 100644 --- a/libavutil/avstring.c +++ b/libavutil/avstring.c @@ -97,3 +97,91 @@ char *av_d2str(double d) if(str) snprintf(str, 16, "%f", d); return str; } + +#define WHITESPACES " \n\t" + +char *av_get_token(const char **buf, const char *term) +{ + char *out = av_malloc(strlen(*buf) + 1); + char *ret= out, *end= out; + const char *p = *buf; + if (!out) return NULL; + p += strspn(p, WHITESPACES); + + while(*p && !strspn(p, term)) { + char c = *p++; + if(c == '\\' && *p){ + *out++ = *p++; + end= out; + }else if(c == '\''){ + while(*p && *p != '\'') + *out++ = *p++; + if(*p){ + p++; + end= out; + } + }else{ + *out++ = c; + } + } + + do{ + *out-- = 0; + }while(out >= end && strspn(out, WHITESPACES)); + + *buf = p; + + return ret; +} + +#ifdef TEST + +#undef printf + +int main(void) +{ + int i; + + printf("Testing av_get_token()\n"); + { + const char *strings[] = { + "''", + "", + ":", + "\\", + "'", + " '' :", + " '' '' :", + "foo '' :", + "'foo'", + "foo ", + " ' foo ' ", + "foo\\", + "foo': blah:blah", + "foo\\: blah:blah", + "foo\'", + "'foo : ' :blahblah", + "\\ :blah", + " foo", + " foo ", + " foo \\ ", + "foo ':blah", + " foo bar : blahblah", + "\\f\\o\\o", + "'foo : \\ \\ ' : blahblah", + "'\\fo\\o:': blahblah", + "\\'fo\\o\\:': foo ' :blahblah" + }; + + for (i=0; i < FF_ARRAY_ELEMS(strings); i++) { + const char *p= strings[i]; + printf("|%s|", p); + printf(" -> |%s|", av_get_token(&p, ":")); + printf(" + |%s|\n", p); + } + } + + return 0; +} + +#endif /* TEST */ diff --git a/libavutil/avstring.h b/libavutil/avstring.h index 01c2391b5f..04d1197386 100644 --- a/libavutil/avstring.h +++ b/libavutil/avstring.h @@ -114,4 +114,20 @@ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...); */ char *av_d2str(double d); +/** + * Unescape the given string until a non escaped terminating char, + * and return the token corresponding to the unescaped string. + * + * The normal \ and ' escaping is supported. Leading and trailing + * whitespaces are removed, unless they are escaped with '\' or are + * enclosed between ''. + * + * @param buf the buffer to parse, buf will be updated to point to the + * terminating char + * @param term a 0-terminated list of terminating chars + * @return the malloced unescaped string, which must be av_freed by + * the user, NULL in case of allocation failure + */ +char *av_get_token(const char **buf, const char *term); + #endif /* AVUTIL_AVSTRING_H */ diff --git a/libavutil/avutil.h b/libavutil/avutil.h index 470d30e765..c441023c4b 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -40,7 +40,7 @@ #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define LIBAVUTIL_VERSION_MAJOR 50 -#define LIBAVUTIL_VERSION_MINOR 29 +#define LIBAVUTIL_VERSION_MINOR 30 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ -- cgit v1.2.3