comparison avstring.c @ 1027:7d79d41d152e libavutil

Move av_get_token() from libavfilter to libavutil.
author stefano
date Mon, 27 Sep 2010 16:23:43 +0000
parents 536c2e94defa
children
comparison
equal deleted inserted replaced
1026:580d47a2f015 1027:7d79d41d152e
95 { 95 {
96 char *str= av_malloc(16); 96 char *str= av_malloc(16);
97 if(str) snprintf(str, 16, "%f", d); 97 if(str) snprintf(str, 16, "%f", d);
98 return str; 98 return str;
99 } 99 }
100
101 #define WHITESPACES " \n\t"
102
103 char *av_get_token(const char **buf, const char *term)
104 {
105 char *out = av_malloc(strlen(*buf) + 1);
106 char *ret= out, *end= out;
107 const char *p = *buf;
108 if (!out) return NULL;
109 p += strspn(p, WHITESPACES);
110
111 while(*p && !strspn(p, term)) {
112 char c = *p++;
113 if(c == '\\' && *p){
114 *out++ = *p++;
115 end= out;
116 }else if(c == '\''){
117 while(*p && *p != '\'')
118 *out++ = *p++;
119 if(*p){
120 p++;
121 end= out;
122 }
123 }else{
124 *out++ = c;
125 }
126 }
127
128 do{
129 *out-- = 0;
130 }while(out >= end && strspn(out, WHITESPACES));
131
132 *buf = p;
133
134 return ret;
135 }
136
137 #ifdef TEST
138
139 #undef printf
140
141 int main(void)
142 {
143 int i;
144
145 printf("Testing av_get_token()\n");
146 {
147 const char *strings[] = {
148 "''",
149 "",
150 ":",
151 "\\",
152 "'",
153 " '' :",
154 " '' '' :",
155 "foo '' :",
156 "'foo'",
157 "foo ",
158 " ' foo ' ",
159 "foo\\",
160 "foo': blah:blah",
161 "foo\\: blah:blah",
162 "foo\'",
163 "'foo : ' :blahblah",
164 "\\ :blah",
165 " foo",
166 " foo ",
167 " foo \\ ",
168 "foo ':blah",
169 " foo bar : blahblah",
170 "\\f\\o\\o",
171 "'foo : \\ \\ ' : blahblah",
172 "'\\fo\\o:': blahblah",
173 "\\'fo\\o\\:': foo ' :blahblah"
174 };
175
176 for (i=0; i < FF_ARRAY_ELEMS(strings); i++) {
177 const char *p= strings[i];
178 printf("|%s|", p);
179 printf(" -> |%s|", av_get_token(&p, ":"));
180 printf(" + |%s|\n", p);
181 }
182 }
183
184 return 0;
185 }
186
187 #endif /* TEST */