You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-05-21 16:47:28 +02:00
Move av_get_token() from libavfilter to libavutil.
Originally committed as revision 25225 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
+1
-1
@@ -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, \
|
||||
|
||||
Reference in New Issue
Block a user