Mercurial > mplayer.hg
annotate m_option.c @ 36084:64825e4a3fed
Remove pointless code.
The URL dialog widget will be destroyed after a selection has been made,
and urlEntries will be freed and rebuilt every time the URL dialog
widget is created (newly). So it makes no sense to prepend any data to
the GList that never will be used.
author | ib |
---|---|
date | Mon, 29 Apr 2013 11:21:23 +0000 |
parents | 389d43c448b3 |
children | 4e3c56728d1e |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30241
diff
changeset
|
17 */ |
18258 | 18 |
19 /// \file | |
20 /// \ingroup Options | |
21 | |
8164 | 22 #include "config.h" |
23 | |
24 #include <stdlib.h> | |
25 #include <string.h> | |
35903 | 26 #include <strings.h> |
8164 | 27 #include <math.h> |
28 #include <stdio.h> | |
29 #include <stdarg.h> | |
30 #include <inttypes.h> | |
8262 | 31 #include <unistd.h> |
8164 | 32 |
33 #include "m_option.h" | |
34 //#include "m_config.h" | |
35 #include "mp_msg.h" | |
35590
388b4cc85c0e
Allow "nopts" as time specification, it might be useful in
reimar
parents:
35272
diff
changeset
|
36 #include "mp_global.h" |
19271
64d82a45a05d
introduce new 'stream' directory for all stream layer related components and split them from libmpdemux
ben
parents:
19194
diff
changeset
|
37 #include "stream/url.h" |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23423
diff
changeset
|
38 #include "libavutil/avstring.h" |
8164 | 39 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
40 // Don't free for 'production' atm |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
41 #ifndef MP_DEBUG |
16425
7ca9d8c0ae47
Do not define NO_FREE, it causes a giant memleak with -loop 0 and a short file.
reimar
parents:
16345
diff
changeset
|
42 //#define NO_FREE |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
43 #endif |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
44 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
45 const m_option_t* m_option_list_find(const m_option_t* list,const char* name) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
46 int i; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
47 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
48 for(i = 0 ; list[i].name ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
49 int l = strlen(list[i].name) - 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
50 if((list[i].type->flags & M_OPT_TYPE_ALLOW_WILDCARD) && |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
51 (l > 0) && (list[i].name[l] == '*')) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
52 if(strncasecmp(list[i].name,name,l) == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
53 return &list[i]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
54 } else if(strcasecmp(list[i].name,name) == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
55 return &list[i]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
56 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
57 return NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
58 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
59 |
10641 | 60 // Default function that just does a memcpy |
8164 | 61 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
62 static void copy_opt(const m_option_t* opt,void* dst,const void* src) { |
8164 | 63 if(dst && src) |
64 memcpy(dst,src,opt->type->size); | |
65 } | |
66 | |
67 // Helper for the print funcs (from man printf) | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
68 static char* dup_printf(const char *fmt, ...) { |
8164 | 69 /* Guess we need no more than 50 bytes. */ |
70 int n, size = 50; | |
71 char *p; | |
72 va_list ap; | |
73 if ((p = malloc (size)) == NULL) | |
74 return NULL; | |
75 while (1) { | |
76 /* Try to print in the allocated space. */ | |
77 va_start(ap, fmt); | |
78 n = vsnprintf (p, size, fmt, ap); | |
79 va_end(ap); | |
80 /* If that worked, return the string. */ | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
81 if (n > -1 && n < size) |
8164 | 82 return p; |
83 /* Else try again with more space. */ | |
84 if (n > -1) /* glibc 2.1 */ | |
85 size = n+1; /* precisely what is needed */ | |
86 else /* glibc 2.0 */ | |
87 size *= 2; /* twice the old size */ | |
88 if ((p = realloc (p, size)) == NULL) | |
89 return NULL; | |
90 } | |
91 } | |
92 | |
93 | |
94 // Flag | |
95 | |
96 #define VAL(x) (*(int*)(x)) | |
97 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
98 static int parse_flag(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 99 if (src == M_CONFIG_FILE) { |
10355
b39a943c902f
Fix the segfault in case of missing arg for flag options
albeu
parents:
10236
diff
changeset
|
100 if(!param) return M_OPT_MISSING_PARAM; |
8164 | 101 if (!strcasecmp(param, "yes") || /* any other language? */ |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
102 !strcasecmp(param, "on") || |
8164 | 103 !strcasecmp(param, "ja") || |
104 !strcasecmp(param, "si") || | |
105 !strcasecmp(param, "igen") || | |
106 !strcasecmp(param, "y") || | |
107 !strcasecmp(param, "j") || | |
108 !strcasecmp(param, "i") || | |
11781 | 109 !strcasecmp(param, "tak") || |
11785 | 110 !strcasecmp(param, "ja") || |
12775 | 111 !strcasecmp(param, "true") || |
8164 | 112 !strcmp(param, "1")) { |
113 if(dst) VAL(dst) = opt->max; | |
114 } else if (!strcasecmp(param, "no") || | |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
115 !strcasecmp(param, "off") || |
8164 | 116 !strcasecmp(param, "nein") || |
117 !strcasecmp(param, "nicht") || | |
118 !strcasecmp(param, "nem") || | |
119 !strcasecmp(param, "n") || | |
11781 | 120 !strcasecmp(param, "nie") || |
11785 | 121 !strcasecmp(param, "nej") || |
12775 | 122 !strcasecmp(param, "false") || |
8164 | 123 !strcmp(param, "0")) { |
124 if(dst) VAL(dst) = opt->min; | |
125 } else { | |
10641 | 126 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid parameter for %s flag: %s\n",name, param); |
8164 | 127 return M_OPT_INVALID; |
128 } | |
129 return 1; | |
130 } else { | |
131 if(dst) VAL(dst) = opt->max; | |
132 return 0; | |
133 } | |
134 } | |
135 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
136 static char* print_flag(const m_option_t* opt, const void* val) { |
8164 | 137 if(VAL(val) == opt->min) |
138 return strdup("no"); | |
139 else | |
140 return strdup("yes"); | |
141 } | |
142 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
143 const m_option_type_t m_option_type_flag = { |
8164 | 144 "Flag", |
145 "need yes or no in config files", | |
146 sizeof(int), | |
147 0, | |
148 parse_flag, | |
149 print_flag, | |
150 copy_opt, | |
151 copy_opt, | |
152 NULL, | |
153 NULL | |
154 }; | |
155 | |
156 // Integer | |
157 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
158 static int parse_int(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
28758
f8625bfd9aa5
Use strtoll in parse_int to avoid discrepancies between 32 and 64 bit systems.
reimar
parents:
28757
diff
changeset
|
159 long long tmp_int; |
8164 | 160 char *endptr; |
161 src = 0; | |
162 | |
163 if (param == NULL) | |
164 return M_OPT_MISSING_PARAM; | |
165 | |
28758
f8625bfd9aa5
Use strtoll in parse_int to avoid discrepancies between 32 and 64 bit systems.
reimar
parents:
28757
diff
changeset
|
166 tmp_int = strtoll(param, &endptr, 10); |
18718
7ef29a590f3f
Do not parse numbers as octal, strip leading zeroes instead.
reimar
parents:
18258
diff
changeset
|
167 if (*endptr) |
28758
f8625bfd9aa5
Use strtoll in parse_int to avoid discrepancies between 32 and 64 bit systems.
reimar
parents:
28757
diff
changeset
|
168 tmp_int = strtoll(param, &endptr, 0); |
8164 | 169 if (*endptr) { |
170 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",name, param); | |
171 return M_OPT_INVALID; | |
172 } | |
173 | |
174 if ((opt->flags & M_OPT_MIN) && (tmp_int < opt->min)) { | |
175 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %d: %s\n", name, (int) opt->min, param); | |
176 return M_OPT_OUT_OF_RANGE; | |
177 } | |
178 | |
179 if ((opt->flags & M_OPT_MAX) && (tmp_int > opt->max)) { | |
180 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %d: %s\n",name, (int) opt->max, param); | |
181 return M_OPT_OUT_OF_RANGE; | |
182 } | |
183 | |
28759
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
184 if(dst) { |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
185 if (opt->type->size == sizeof(int64_t)) |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
186 *(int64_t *)dst = tmp_int; |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
187 else |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
188 VAL(dst) = tmp_int; |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
189 } |
8164 | 190 |
191 return 1; | |
192 } | |
193 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
194 static char* print_int(const m_option_t* opt, const void* val) { |
28759
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
195 if (opt->type->size == sizeof(int64_t)) |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
196 return dup_printf("%"PRId64, *(const int64_t *)val); |
8164 | 197 return dup_printf("%d",VAL(val)); |
198 } | |
199 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
200 const m_option_type_t m_option_type_int = { |
8164 | 201 "Integer", |
202 "", | |
203 sizeof(int), | |
204 0, | |
205 parse_int, | |
206 print_int, | |
207 copy_opt, | |
208 copy_opt, | |
209 NULL, | |
210 NULL | |
211 }; | |
212 | |
28759
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
213 const m_option_type_t m_option_type_int64 = { |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
214 "Integer64", |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
215 "", |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
216 sizeof(int64_t), |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
217 0, |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
218 parse_int, |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
219 print_int, |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
220 copy_opt, |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
221 copy_opt, |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
222 NULL, |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
223 NULL |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
224 }; |
af274aef6b81
Add a 64 bit integer type to the suboption parser.
reimar
parents:
28758
diff
changeset
|
225 |
8164 | 226 // Float |
227 | |
228 #undef VAL | |
11947 | 229 #define VAL(x) (*(double*)(x)) |
8164 | 230 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
231 static int parse_double(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
11947 | 232 double tmp_float; |
8164 | 233 char* endptr; |
234 src = 0; | |
235 | |
236 if (param == NULL) | |
237 return M_OPT_MISSING_PARAM; | |
238 | |
239 tmp_float = strtod(param, &endptr); | |
240 | |
241 switch(*endptr) { | |
242 case ':': | |
243 case '/': | |
244 tmp_float /= strtod(endptr+1, &endptr); | |
245 break; | |
246 case '.': | |
247 case ',': | |
248 /* we also handle floats specified with | |
249 * non-locale decimal point ::atmos | |
250 */ | |
251 if(tmp_float<0) | |
252 tmp_float -= 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr); | |
253 else | |
254 tmp_float += 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr); | |
255 break; | |
256 } | |
257 | |
258 if (*endptr) { | |
259 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be a floating point " | |
260 "number or a ratio (numerator[:/]denominator): %s\n",name, param); | |
261 return M_OPT_INVALID; | |
262 } | |
263 | |
264 if (opt->flags & M_OPT_MIN) | |
265 if (tmp_float < opt->min) { | |
266 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %f: %s\n", name, opt->min, param); | |
267 return M_OPT_OUT_OF_RANGE; | |
268 } | |
269 | |
270 if (opt->flags & M_OPT_MAX) | |
271 if (tmp_float > opt->max) { | |
272 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %f: %s\n", name, opt->max, param); | |
273 return M_OPT_OUT_OF_RANGE; | |
274 } | |
275 | |
276 if(dst) VAL(dst) = tmp_float; | |
277 return 1; | |
278 } | |
279 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
280 static char* print_double(const m_option_t* opt, const void* val) { |
11947 | 281 opt = NULL; |
282 return dup_printf("%f",VAL(val)); | |
283 } | |
284 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
285 const m_option_type_t m_option_type_double = { |
11947 | 286 "Double", |
31834
64ba1daa147a
various spelling fixes, found by the Debian QA tool 'lintian'
siretart
parents:
31493
diff
changeset
|
287 "double precision floating point number or ratio (numerator[:/]denominator)", |
11947 | 288 sizeof(double), |
289 0, | |
290 parse_double, | |
291 print_double, | |
292 copy_opt, | |
293 copy_opt, | |
294 NULL, | |
295 NULL | |
296 }; | |
297 | |
298 #undef VAL | |
299 #define VAL(x) (*(float*)(x)) | |
300 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
301 static int parse_float(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
11947 | 302 double tmp; |
303 int r= parse_double(opt, name, param, &tmp, src); | |
304 if(r==1 && dst) VAL(dst) = tmp; | |
11950 | 305 return r; |
11947 | 306 } |
307 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
308 static char* print_float(const m_option_t* opt, const void* val) { |
8164 | 309 opt = NULL; |
310 return dup_printf("%f",VAL(val)); | |
311 } | |
312 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
313 const m_option_type_t m_option_type_float = { |
8164 | 314 "Float", |
315 "floating point number or ratio (numerator[:/]denominator)", | |
316 sizeof(float), | |
317 0, | |
318 parse_float, | |
319 print_float, | |
320 copy_opt, | |
321 copy_opt, | |
322 NULL, | |
323 NULL | |
324 }; | |
325 | |
326 ///////////// Position | |
327 #undef VAL | |
328 #define VAL(x) (*(off_t*)(x)) | |
329 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
330 static int parse_position(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 331 off_t tmp_off; |
332 char dummy; | |
333 | |
334 if (param == NULL) | |
335 return M_OPT_MISSING_PARAM; | |
336 if (sscanf(param, sizeof(off_t) == sizeof(int) ? | |
16750
0a31740dd5e6
Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents:
16741
diff
changeset
|
337 "%d%c" : "%"PRId64"%c", &tmp_off, &dummy) != 1) { |
8164 | 338 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",opt->name,param); |
339 return M_OPT_INVALID; | |
340 } | |
341 | |
342 if (opt->flags & M_OPT_MIN) | |
343 if (tmp_off < opt->min) { | |
344 mp_msg(MSGT_CFGPARSER, MSGL_ERR, | |
16750
0a31740dd5e6
Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents:
16741
diff
changeset
|
345 "The %s option must be >= %"PRId64": %s\n", |
0a31740dd5e6
Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents:
16741
diff
changeset
|
346 name, (int64_t) opt->min, param); |
8164 | 347 return M_OPT_OUT_OF_RANGE; |
348 } | |
349 | |
350 if (opt->flags & M_OPT_MAX) | |
351 if (tmp_off > opt->max) { | |
352 mp_msg(MSGT_CFGPARSER, MSGL_ERR, | |
16750
0a31740dd5e6
Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents:
16741
diff
changeset
|
353 "The %s option must be <= %"PRId64": %s\n", |
0a31740dd5e6
Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents:
16741
diff
changeset
|
354 name, (int64_t) opt->max, param); |
8164 | 355 return M_OPT_OUT_OF_RANGE; |
356 } | |
357 | |
358 if(dst) | |
359 VAL(dst) = tmp_off; | |
360 return 1; | |
361 } | |
362 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
363 static char* print_position(const m_option_t* opt, const void* val) { |
16750
0a31740dd5e6
Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents:
16741
diff
changeset
|
364 return dup_printf("%"PRId64,(int64_t)VAL(val)); |
8164 | 365 } |
366 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
367 const m_option_type_t m_option_type_position = { |
8164 | 368 "Position", |
369 "Integer (off_t)", | |
370 sizeof(off_t), | |
371 0, | |
372 parse_position, | |
373 print_position, | |
374 copy_opt, | |
375 copy_opt, | |
376 NULL, | |
377 NULL | |
378 }; | |
379 | |
380 | |
381 ///////////// String | |
382 | |
383 #undef VAL | |
384 #define VAL(x) (*(char**)(x)) | |
385 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
386 static int parse_str(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
387 |
8164 | 388 |
389 if (param == NULL) | |
390 return M_OPT_MISSING_PARAM; | |
391 | |
392 if ((opt->flags & M_OPT_MIN) && (strlen(param) < opt->min)) { | |
10641 | 393 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Parameter must be >= %d chars: %s\n", |
8164 | 394 (int) opt->min, param); |
395 return M_OPT_OUT_OF_RANGE; | |
396 } | |
397 | |
398 if ((opt->flags & M_OPT_MAX) && (strlen(param) > opt->max)) { | |
10641 | 399 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Parameter must be <= %d chars: %s\n", |
8164 | 400 (int) opt->max, param); |
401 return M_OPT_OUT_OF_RANGE; | |
402 } | |
403 | |
404 if(dst) { | |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32428
diff
changeset
|
405 free(VAL(dst)); |
8164 | 406 VAL(dst) = strdup(param); |
407 } | |
408 | |
409 return 1; | |
410 | |
411 } | |
412 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
413 static char* print_str(const m_option_t* opt, const void* val) { |
8168 | 414 return (val && VAL(val) && strlen(VAL(val)) > 0) ? strdup(VAL(val)) : NULL; |
8164 | 415 } |
416 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
417 static void copy_str(const m_option_t* opt,void* dst, const void* src) { |
8164 | 418 if(dst && src) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
419 #ifndef NO_FREE |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32428
diff
changeset
|
420 free(VAL(dst)); //FIXME!!! |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
421 #endif |
8164 | 422 VAL(dst) = VAL(src) ? strdup(VAL(src)) : NULL; |
423 } | |
424 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
425 |
8164 | 426 static void free_str(void* src) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
427 if(src && VAL(src)){ |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
428 #ifndef NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
429 free(VAL(src)); //FIXME!!! |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
430 #endif |
8164 | 431 VAL(src) = NULL; |
432 } | |
433 } | |
434 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
435 const m_option_type_t m_option_type_string = { |
8164 | 436 "String", |
437 "", | |
438 sizeof(char*), | |
439 M_OPT_TYPE_DYNAMIC, | |
440 parse_str, | |
441 print_str, | |
442 copy_str, | |
443 copy_str, | |
444 copy_str, | |
445 free_str | |
446 }; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
447 |
8164 | 448 //////////// String list |
449 | |
450 #define LIST_SEPARATOR ',' | |
451 #undef VAL | |
452 #define VAL(x) (*(char***)(x)) | |
453 | |
454 #define OP_NONE 0 | |
455 #define OP_ADD 1 | |
456 #define OP_PRE 2 | |
457 #define OP_DEL 3 | |
458 #define OP_CLR 4 | |
459 | |
460 static void free_str_list(void* dst) { | |
461 char** d; | |
462 int i; | |
463 | |
464 if(!dst || !VAL(dst)) return; | |
465 d = VAL(dst); | |
466 | |
9177
01a713dcaf23
disable free() in string and string_list parsers. yes, it's a hack
arpi
parents:
8736
diff
changeset
|
467 // FIXME!!! |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
468 #ifndef NO_FREE |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
469 for(i = 0 ; d[i] != NULL ; i++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
470 free(d[i]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
471 free(d); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
472 #endif |
8164 | 473 VAL(dst) = NULL; |
474 } | |
475 | |
476 static int str_list_add(char** add, int n,void* dst,int pre) { | |
35261
1c18199bbf7c
Remove assignment that is duplicated a few lines down,
reimar
parents:
34932
diff
changeset
|
477 char** lst; |
8164 | 478 int ln; |
479 | |
480 if(!dst) return M_OPT_PARSER_ERR; | |
481 lst = VAL(dst); | |
482 | |
483 for(ln = 0 ; lst && lst[ln] ; ln++) | |
484 /**/; | |
485 | |
486 lst = realloc(lst,(n+ln+1)*sizeof(char*)); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
487 |
8164 | 488 if(pre) { |
31493
0a7222a42a70
Ensure that e.g. -af-pre will not cause the filter list to be
reimar
parents:
31082
diff
changeset
|
489 memmove(&lst[n],lst,ln*sizeof(char*)); |
8164 | 490 memcpy(lst,add,n*sizeof(char*)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
491 } else |
31493
0a7222a42a70
Ensure that e.g. -af-pre will not cause the filter list to be
reimar
parents:
31082
diff
changeset
|
492 memcpy(&lst[ln],add,n*sizeof(char*)); |
0a7222a42a70
Ensure that e.g. -af-pre will not cause the filter list to be
reimar
parents:
31082
diff
changeset
|
493 // (re-)add NULL-termination |
0a7222a42a70
Ensure that e.g. -af-pre will not cause the filter list to be
reimar
parents:
31082
diff
changeset
|
494 lst[ln+n] = NULL; |
8164 | 495 |
496 free(add); | |
497 | |
498 VAL(dst) = lst; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
499 |
8164 | 500 return 1; |
501 } | |
502 | |
503 static int str_list_del(char** del, int n,void* dst) { | |
504 char **lst,*ep,**d; | |
505 int i,ln,s; | |
506 long idx; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
507 |
8164 | 508 if(!dst) return M_OPT_PARSER_ERR; |
509 lst = VAL(dst); | |
510 | |
511 for(ln = 0 ; lst && lst[ln] ; ln++) | |
512 /**/; | |
513 s = ln; | |
514 | |
515 for(i = 0 ; del[i] != NULL ; i++) { | |
516 idx = strtol(del[i], &ep, 0); | |
517 if(*ep) { | |
518 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid index: %s\n",del[i]); | |
519 free(del[i]); | |
520 continue; | |
521 } | |
522 free(del[i]); | |
523 if(idx < 0 || idx >= ln) { | |
10641 | 524 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Index %ld is out of range.\n",idx); |
8164 | 525 continue; |
526 } else if(!lst[idx]) | |
527 continue; | |
528 free(lst[idx]); | |
529 lst[idx] = NULL; | |
530 s--; | |
531 } | |
532 free(del); | |
533 | |
534 if(s == 0) { | |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32428
diff
changeset
|
535 free(lst); |
8164 | 536 VAL(dst) = NULL; |
537 return 1; | |
538 } | |
539 | |
540 d = calloc(s+1,sizeof(char*)); | |
541 for(i = 0, n = 0 ; i < ln ; i++) { | |
542 if(!lst[i]) continue; | |
543 d[n] = lst[i]; | |
544 n++; | |
545 } | |
546 d[s] = NULL; | |
547 | |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32428
diff
changeset
|
548 free(lst); |
8164 | 549 VAL(dst) = d; |
550 | |
551 return 1; | |
552 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
553 |
22133 | 554 static char *get_nextsep(char *ptr, char sep, int modify) { |
555 char *last_ptr = ptr; | |
556 for(;;){ | |
557 ptr = strchr(ptr, sep); | |
558 if(ptr && ptr>last_ptr && ptr[-1]=='\\'){ | |
559 if (modify) memmove(ptr-1, ptr, strlen(ptr)+1); | |
560 else ptr++; | |
561 }else | |
562 break; | |
563 } | |
564 return ptr; | |
565 } | |
8164 | 566 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
567 static int parse_str_list(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 568 int n = 0,len = strlen(opt->name); |
22133 | 569 char *str; |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
570 char *ptr = (char *)param, *last_ptr, **res; |
8164 | 571 int op = OP_NONE; |
572 | |
573 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) { | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
574 const char* n = &name[len-1]; |
8164 | 575 if(strcasecmp(n,"-add") == 0) |
576 op = OP_ADD; | |
577 else if(strcasecmp(n,"-pre") == 0) | |
578 op = OP_PRE; | |
579 else if(strcasecmp(n,"-del") == 0) | |
580 op = OP_DEL; | |
581 else if(strcasecmp(n,"-clr") == 0) | |
582 op = OP_CLR; | |
583 else | |
10595
522afd56703c
100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents:
10594
diff
changeset
|
584 return M_OPT_UNKNOWN; |
8164 | 585 } |
586 | |
587 // Clear the list ?? | |
588 if(op == OP_CLR) { | |
589 if(dst) | |
590 free_str_list(dst); | |
591 return 0; | |
592 } | |
593 | |
10641 | 594 // All other ops need a param |
8164 | 595 if (param == NULL || strlen(param) == 0) |
596 return M_OPT_MISSING_PARAM; | |
597 | |
598 | |
599 while(ptr[0] != '\0') { | |
22133 | 600 ptr = get_nextsep(ptr, LIST_SEPARATOR, 0); |
8164 | 601 if(!ptr) { |
602 n++; | |
603 break; | |
604 } | |
605 ptr++; | |
606 n++; | |
607 } | |
608 if(n == 0) | |
609 return M_OPT_INVALID; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
610 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) || |
8164 | 611 ((opt->flags & M_OPT_MAX) && (n > opt->max)) ) |
612 return M_OPT_OUT_OF_RANGE; | |
613 | |
614 if(!dst) return 1; | |
615 | |
8384
7a7980b874f5
fixed 'mplayer -nosound xxx' sig11 if configfile have string list options
arpi
parents:
8262
diff
changeset
|
616 res = malloc((n+2)*sizeof(char*)); |
22133 | 617 ptr = str = strdup(param); |
8164 | 618 n = 0; |
619 | |
620 while(1) { | |
621 last_ptr = ptr; | |
22133 | 622 ptr = get_nextsep(ptr, LIST_SEPARATOR, 1); |
8164 | 623 if(!ptr) { |
624 res[n] = strdup(last_ptr); | |
625 n++; | |
626 break; | |
627 } | |
628 len = ptr - last_ptr; | |
18869 | 629 res[n] = malloc(len + 1); |
8164 | 630 if(len) strncpy(res[n],last_ptr,len); |
631 res[n][len] = '\0'; | |
632 ptr++; | |
633 n++; | |
634 } | |
635 res[n] = NULL; | |
22133 | 636 free(str); |
8164 | 637 |
638 switch(op) { | |
639 case OP_ADD: | |
640 return str_list_add(res,n,dst,0); | |
641 case OP_PRE: | |
642 return str_list_add(res,n,dst,1); | |
643 case OP_DEL: | |
644 return str_list_del(res,n,dst); | |
645 } | |
646 | |
647 if(VAL(dst)) | |
648 free_str_list(dst); | |
649 VAL(dst) = res; | |
650 | |
651 return 1; | |
652 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
653 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
654 static void copy_str_list(const m_option_t* opt,void* dst, const void* src) { |
8164 | 655 int n; |
656 char **d,**s; | |
657 | |
658 if(!(dst && src)) return; | |
659 s = VAL(src); | |
660 | |
661 if(VAL(dst)) | |
662 free_str_list(dst); | |
663 | |
664 if(!s) { | |
665 VAL(dst) = NULL; | |
666 return; | |
667 } | |
668 | |
669 for(n = 0 ; s[n] != NULL ; n++) | |
670 /* NOTHING */; | |
18869 | 671 d = malloc((n+1)*sizeof(char*)); |
8164 | 672 for( ; n >= 0 ; n--) |
673 d[n] = s[n] ? strdup(s[n]) : NULL; | |
674 | |
675 VAL(dst) = d; | |
676 } | |
677 | |
25229
4f611a555224
Option print functions may not and do not modify value
reimar
parents:
24966
diff
changeset
|
678 static char* print_str_list(const m_option_t* opt, const void* src) { |
8168 | 679 char **lst = NULL; |
680 char *ret = NULL,*last = NULL; | |
681 int i; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
682 |
8168 | 683 if(!(src && VAL(src))) return NULL; |
684 lst = VAL(src); | |
685 | |
686 for(i = 0 ; lst[i] ; i++) { | |
687 if(last) { | |
688 ret = dup_printf("%s,%s",last,lst[i]); | |
689 free(last); | |
690 } else | |
691 ret = strdup(lst[i]); | |
692 last = ret; | |
693 } | |
694 if(last && last != ret) free(last); | |
695 return ret; | |
8164 | 696 } |
697 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
698 const m_option_type_t m_option_type_string_list = { |
8164 | 699 "String list", |
10641 | 700 "A list of strings separated by ','\n" |
701 "Option with a name ending in an * permits using the following suffix: \n" | |
702 "\t-add: Add the given parameters at the end of the list.\n" | |
25489 | 703 "\t-pre: Add the given parameters at the beginning of the list.\n" |
10641 | 704 "\t-del: Remove the entry at the given indices.\n" |
705 "\t-clr: Clear the list.\n" | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
706 "e.g: -vf-add flip,mirror -vf-del 2,5\n", |
8164 | 707 sizeof(char**), |
708 M_OPT_TYPE_DYNAMIC | M_OPT_TYPE_ALLOW_WILDCARD, | |
709 parse_str_list, | |
710 print_str_list, | |
711 copy_str_list, | |
712 copy_str_list, | |
713 copy_str_list, | |
714 free_str_list | |
715 }; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
716 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
717 |
8164 | 718 /////////////////// Func based options |
719 | |
34169 | 720 static int parse_call_func(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
34171
cca4f430b0f4
Pass on errors from CONF_TYPE_FUNC_PARAM_IMMEDIATE function.
reimar
parents:
34170
diff
changeset
|
721 int res = ((m_opt_func_param_t) opt->p)(opt,param); |
cca4f430b0f4
Pass on errors from CONF_TYPE_FUNC_PARAM_IMMEDIATE function.
reimar
parents:
34170
diff
changeset
|
722 if (res < 0) |
cca4f430b0f4
Pass on errors from CONF_TYPE_FUNC_PARAM_IMMEDIATE function.
reimar
parents:
34170
diff
changeset
|
723 return res; |
34170 | 724 return 1; |
34169 | 725 } |
726 | |
727 // special variant, will not have a history/be able to | |
728 // be used as per-file option etc. | |
729 const m_option_type_t m_option_type_func_param_immediate = { | |
730 "Func param once", | |
731 "", | |
732 0, | |
733 M_OPT_TYPE_INDIRECT, | |
734 parse_call_func, | |
735 NULL, | |
736 NULL, // Nothing to do on save | |
737 NULL, | |
738 NULL, | |
739 NULL | |
740 }; | |
741 | |
8164 | 742 // A chained list to save the various calls for func_param and func_full |
743 typedef struct m_func_save m_func_save_t; | |
744 struct m_func_save { | |
745 m_func_save_t* next; | |
746 char* name; | |
747 char* param; | |
748 }; | |
749 | |
750 #undef VAL | |
751 #define VAL(x) (*(m_func_save_t**)(x)) | |
752 | |
753 static void free_func_pf(void* src) { | |
754 m_func_save_t *s,*n; | |
755 | |
756 if(!src) return; | |
757 | |
758 s = VAL(src); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
759 |
8164 | 760 while(s) { |
761 n = s->next; | |
762 free(s->name); | |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32428
diff
changeset
|
763 free(s->param); |
8164 | 764 free(s); |
765 s = n; | |
766 } | |
767 VAL(src) = NULL; | |
768 } | |
769 | |
770 // Parser for func_param and func_full | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
771 static int parse_func_pf(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 772 m_func_save_t *s,*p; |
773 | |
774 if(!dst) | |
775 return 1; | |
776 | |
18879 | 777 s = calloc(1,sizeof(m_func_save_t)); |
8164 | 778 s->name = strdup(name); |
779 s->param = param ? strdup(param) : NULL; | |
780 | |
781 p = VAL(dst); | |
782 if(p) { | |
783 for( ; p->next != NULL ; p = p->next) | |
784 /**/; | |
785 p->next = s; | |
786 } else | |
787 VAL(dst) = s; | |
788 | |
789 return 1; | |
790 } | |
791 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
792 static void copy_func_pf(const m_option_t* opt,void* dst, const void* src) { |
8164 | 793 m_func_save_t *d = NULL, *s,* last = NULL; |
794 | |
795 if(!(dst && src)) return; | |
796 s = VAL(src); | |
797 | |
798 if(VAL(dst)) | |
799 free_func_pf(dst); | |
800 | |
801 while(s) { | |
18879 | 802 d = calloc(1,sizeof(m_func_save_t)); |
8164 | 803 d->name = strdup(s->name); |
804 d->param = s->param ? strdup(s->param) : NULL; | |
805 if(last) | |
806 last->next = d; | |
807 else | |
808 VAL(dst) = d; | |
809 last = d; | |
810 s = s->next; | |
811 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
812 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
813 |
8164 | 814 } |
815 | |
816 /////////////////// Func_param | |
817 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
818 static void set_func_param(const m_option_t* opt, void* dst, const void* src) { |
8164 | 819 m_func_save_t* s; |
820 | |
821 if(!src) return; | |
822 s = VAL(src); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
823 |
8164 | 824 if(!s) return; |
825 | |
826 // Revert if needed | |
827 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name); | |
828 for( ; s != NULL ; s = s->next) | |
829 ((m_opt_func_param_t) opt->p)(opt,s->param); | |
830 } | |
831 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
832 const m_option_type_t m_option_type_func_param = { |
8164 | 833 "Func param", |
834 "", | |
835 sizeof(m_func_save_t*), | |
836 M_OPT_TYPE_INDIRECT, | |
837 parse_func_pf, | |
838 NULL, | |
839 NULL, // Nothing to do on save | |
840 set_func_param, | |
841 copy_func_pf, | |
842 free_func_pf | |
843 }; | |
844 | |
845 /////////////////// Func_full | |
846 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
847 static void set_func_full(const m_option_t* opt, void* dst, const void* src) { |
8164 | 848 m_func_save_t* s; |
849 | |
850 if(!src) return; | |
851 | |
852 for(s = VAL(src) ; s ; s = s->next) { | |
853 // Revert if needed | |
854 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,s->name); | |
855 ((m_opt_func_full_t) opt->p)(opt,s->name,s->param); | |
856 } | |
857 } | |
858 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
859 const m_option_type_t m_option_type_func_full = { |
8164 | 860 "Func full", |
861 "", | |
862 sizeof(m_func_save_t*), | |
863 M_OPT_TYPE_ALLOW_WILDCARD|M_OPT_TYPE_INDIRECT, | |
864 parse_func_pf, | |
865 NULL, | |
866 NULL, // Nothing to do on save | |
867 set_func_full, | |
868 copy_func_pf, | |
869 free_func_pf | |
870 }; | |
871 | |
872 /////////////// Func | |
873 | |
874 #undef VAL | |
875 #define VAL(x) (*(int*)(x)) | |
876 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
877 static int parse_func(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 878 if(dst) |
879 VAL(dst) += 1; | |
880 return 0; | |
881 } | |
882 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
883 static void set_func(const m_option_t* opt,void* dst, const void* src) { |
8164 | 884 int i; |
885 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name); | |
886 for(i = 0 ; i < VAL(src) ; i++) | |
887 ((m_opt_func_t) opt->p)(opt); | |
888 } | |
889 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
890 const m_option_type_t m_option_type_func = { |
8164 | 891 "Func", |
892 "", | |
893 sizeof(int), | |
894 M_OPT_TYPE_INDIRECT, | |
895 parse_func, | |
896 NULL, | |
897 NULL, // Nothing to do on save | |
898 set_func, | |
899 NULL, | |
900 NULL | |
901 }; | |
902 | |
903 /////////////////// Print | |
904 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
905 static int parse_print(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
906 if(opt->type == CONF_TYPE_PRINT_INDIRECT) |
8736 | 907 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", *(char **) opt->p); |
17470
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
908 else if(opt->type == CONF_TYPE_PRINT_FUNC) |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
909 return ((m_opt_func_full_t) opt->p)(opt,name,param); |
8736 | 910 else |
911 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", (char *) opt->p); | |
912 | |
8164 | 913 if(opt->priv == NULL) |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
914 return M_OPT_EXIT; |
34149 | 915 if(opt->priv == PRIV_NO_EXIT) |
916 return 0; | |
8164 | 917 return 1; |
918 } | |
919 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
920 const m_option_type_t m_option_type_print = { |
8164 | 921 "Print", |
922 "", | |
923 0, | |
924 0, | |
925 parse_print, | |
926 NULL, | |
927 NULL, | |
928 NULL, | |
929 NULL, | |
930 NULL | |
931 }; | |
932 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
933 const m_option_type_t m_option_type_print_indirect = { |
8736 | 934 "Print", |
935 "", | |
936 0, | |
17468
41d8991c3632
Fix misuse of the M_OPT_TYPE_INDIRECT flag, it has nothing to do
albeu
parents:
16854
diff
changeset
|
937 0, |
8736 | 938 parse_print, |
939 NULL, | |
940 NULL, | |
941 NULL, | |
942 NULL, | |
943 NULL | |
944 }; | |
945 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
946 const m_option_type_t m_option_type_print_func = { |
17470
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
947 "Print", |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
948 "", |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
949 0, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
950 M_OPT_TYPE_ALLOW_WILDCARD, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
951 parse_print, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
952 NULL, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
953 NULL, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
954 NULL, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
955 NULL, |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
956 NULL |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
957 }; |
21123e349463
New option type to print help text with a function.
albeu
parents:
17468
diff
changeset
|
958 |
8736 | 959 |
8164 | 960 /////////////////////// Subconfig |
961 #undef VAL | |
962 #define VAL(x) (*(char***)(x)) | |
963 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
964 static int parse_subconf(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 965 char *subparam; |
966 char *subopt; | |
35272 | 967 int nr = 0,i,r = 1; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
968 const m_option_t *subopts; |
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
969 const char *p; |
8164 | 970 char** lst = NULL; |
971 | |
972 if (param == NULL || strlen(param) == 0) | |
973 return M_OPT_MISSING_PARAM; | |
974 | |
975 subparam = malloc(strlen(param)+1); | |
976 subopt = malloc(strlen(param)+1); | |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
977 p = param; |
8164 | 978 |
979 subopts = opt->p; | |
980 | |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
981 while(p[0]) |
8164 | 982 { |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
983 int sscanf_ret = 1; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
984 int optlen = strcspn(p, ":="); |
8164 | 985 /* clear out */ |
986 subopt[0] = subparam[0] = 0; | |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23423
diff
changeset
|
987 av_strlcpy(subopt, p, optlen + 1); |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
988 p = &p[optlen]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
989 if (p[0] == '=') { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
990 sscanf_ret = 2; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
991 p = &p[1]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
992 if (p[0] == '"') { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
993 p = &p[1]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
994 optlen = strcspn(p, "\""); |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23423
diff
changeset
|
995 av_strlcpy(subparam, p, optlen + 1); |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
996 p = &p[optlen]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
997 if (p[0] != '"') { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
998 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Terminating '\"' missing for '%s'\n", subopt); |
35272 | 999 r = M_OPT_INVALID; |
1000 goto out; | |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1001 } |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1002 p = &p[1]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1003 } else if (p[0] == '%') { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1004 p = &p[1]; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1005 optlen = (int)strtol(p, (char**)&p, 0); |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1006 if (!p || p[0] != '%' || (optlen > strlen(p) - 1)) { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1007 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid length %i for '%s'\n", optlen, subopt); |
35272 | 1008 r = M_OPT_INVALID; |
1009 goto out; | |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1010 } |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1011 p = &p[1]; |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23423
diff
changeset
|
1012 av_strlcpy(subparam, p, optlen + 1); |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1013 p = &p[optlen]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1014 } else { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1015 optlen = strcspn(p, ":"); |
23703
9fb716ab06a3
Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents:
23423
diff
changeset
|
1016 av_strlcpy(subparam, p, optlen + 1); |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1017 p = &p[optlen]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1018 } |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1019 } |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1020 if (p[0] == ':') |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1021 p = &p[1]; |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1022 else if (p[0]) { |
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1023 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Incorrect termination for '%s'\n", subopt); |
35272 | 1024 r = M_OPT_INVALID; |
1025 goto out; | |
16741
ec4a53c1c40b
Add support for suboption escaping via both "" and %n%str syntax
reimar
parents:
16425
diff
changeset
|
1026 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1027 |
8164 | 1028 switch(sscanf_ret) |
1029 { | |
1030 case 1: | |
1031 subparam[0] = 0; | |
1032 case 2: | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1033 for(i = 0 ; subopts[i].name ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1034 if(!strcmp(subopts[i].name,subopt)) break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1035 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1036 if(!subopts[i].name) { |
10397 | 1037 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Unknown suboption %s\n",name,subopt); |
35272 | 1038 r = M_OPT_UNKNOWN; |
1039 goto out; | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1040 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1041 r = m_option_parse(&subopts[i],subopt, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1042 subparam[0] == 0 ? NULL : subparam,NULL,src); |
35272 | 1043 if(r < 0) goto out; |
8164 | 1044 if(dst) { |
30702 | 1045 lst = realloc(lst,2 * (nr+2) * sizeof(char*)); |
8164 | 1046 lst[2*nr] = strdup(subopt); |
1047 lst[2*nr+1] = subparam[0] == 0 ? NULL : strdup(subparam); | |
1048 memset(&lst[2*(nr+1)],0,2*sizeof(char*)); | |
1049 nr++; | |
1050 } | |
1051 break; | |
1052 } | |
1053 } | |
1054 | |
35272 | 1055 if(dst) |
1056 VAL(dst) = lst; | |
1057 r = 1; | |
1058 | |
1059 out: | |
8164 | 1060 free(subparam); |
1061 free(subopt); | |
1062 | |
35272 | 1063 return r; |
8164 | 1064 } |
1065 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1066 const m_option_type_t m_option_type_subconfig = { |
8164 | 1067 "Subconfig", |
1068 "The syntax is -option opt1=foo:flag:opt2=blah", | |
1069 sizeof(int), | |
1070 M_OPT_TYPE_HAS_CHILD, | |
1071 parse_subconf, | |
1072 NULL, | |
1073 NULL, | |
1074 NULL, | |
1075 NULL, | |
1076 NULL | |
1077 }; | |
1078 | |
1079 #include "libmpcodecs/img_format.h" | |
9600 | 1080 |
10746
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1081 /* FIXME: snyc with img_format.h */ |
9600 | 1082 static struct { |
19194
5949a654e2d4
marks some read-only char* inside structs as const, patch by Stefan Huehner, stefan At huehner-org
reynaldo
parents:
19053
diff
changeset
|
1083 const char* name; |
9600 | 1084 unsigned int fmt; |
1085 } mp_imgfmt_list[] = { | |
30110 | 1086 {"444p16le", IMGFMT_444P16_LE}, |
1087 {"444p16be", IMGFMT_444P16_BE}, | |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1088 {"444p14le", IMGFMT_444P14_LE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1089 {"444p14be", IMGFMT_444P14_BE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1090 {"444p12le", IMGFMT_444P12_LE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1091 {"444p12be", IMGFMT_444P12_BE}, |
34028 | 1092 {"444p10le", IMGFMT_444P10_LE}, |
1093 {"444p10be", IMGFMT_444P10_BE}, | |
34191 | 1094 {"444p9le", IMGFMT_444P9_LE}, |
1095 {"444p9be", IMGFMT_444P9_BE}, | |
30110 | 1096 {"422p16le", IMGFMT_422P16_LE}, |
1097 {"422p16be", IMGFMT_422P16_BE}, | |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1098 {"422p14le", IMGFMT_422P14_LE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1099 {"422p14be", IMGFMT_422P14_BE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1100 {"422p12le", IMGFMT_422P12_LE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1101 {"422p12be", IMGFMT_422P12_BE}, |
33364
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32511
diff
changeset
|
1102 {"422p10le", IMGFMT_422P10_LE}, |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32511
diff
changeset
|
1103 {"422p10be", IMGFMT_422P10_BE}, |
34436 | 1104 {"422p9le", IMGFMT_422P9_LE}, |
1105 {"422p9be", IMGFMT_422P9_BE}, | |
30110 | 1106 {"420p16le", IMGFMT_420P16_LE}, |
1107 {"420p16be", IMGFMT_420P16_BE}, | |
33364
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32511
diff
changeset
|
1108 {"420p10le", IMGFMT_420P10_LE}, |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32511
diff
changeset
|
1109 {"420p10be", IMGFMT_420P10_BE}, |
34191 | 1110 {"420p9le", IMGFMT_420P9_LE}, |
1111 {"420p9be", IMGFMT_420P9_BE}, | |
1112 {"444p16", IMGFMT_444P16}, | |
1113 {"422p16", IMGFMT_422P16}, | |
1114 {"422p10", IMGFMT_422P10}, | |
1115 {"420p16", IMGFMT_420P16}, | |
1116 {"420p10", IMGFMT_420P10}, | |
1117 {"420p9", IMGFMT_420P9}, | |
34565 | 1118 {"444a", IMGFMT_444A}, |
34805
0eba64545a27
Improve Avid Meridien (AVUI) decoding with FFmpeg.
cehoyos
parents:
34572
diff
changeset
|
1119 {"422a", IMGFMT_422A}, |
30115
ad61464d02a7
Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents:
30110
diff
changeset
|
1120 {"420a", IMGFMT_420A}, |
9600 | 1121 {"444p", IMGFMT_444P}, |
1122 {"422p", IMGFMT_422P}, | |
1123 {"411p", IMGFMT_411P}, | |
30098 | 1124 {"440p", IMGFMT_440P}, |
9600 | 1125 {"yuy2", IMGFMT_YUY2}, |
33605 | 1126 {"yvyu", IMGFMT_YVYU}, |
10746
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1127 {"uyvy", IMGFMT_UYVY}, |
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1128 {"yvu9", IMGFMT_YVU9}, |
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1129 {"if09", IMGFMT_IF09}, |
9600 | 1130 {"yv12", IMGFMT_YV12}, |
1131 {"i420", IMGFMT_I420}, | |
1132 {"iyuv", IMGFMT_IYUV}, | |
10746
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1133 {"clpl", IMGFMT_CLPL}, |
11688 | 1134 {"hm12", IMGFMT_HM12}, |
10746
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1135 {"y800", IMGFMT_Y800}, |
34191 | 1136 {"y8", IMGFMT_Y8}, |
34932
19212dea7a97
Add missing aequivalents for PIX_FMT_GRAY8A and PIX_FMT_GRAY16*.
cehoyos
parents:
34923
diff
changeset
|
1137 {"y8a", IMGFMT_Y8A}, |
19212dea7a97
Add missing aequivalents for PIX_FMT_GRAY8A and PIX_FMT_GRAY16*.
cehoyos
parents:
34923
diff
changeset
|
1138 {"y16be", IMGFMT_Y16_BE}, |
19212dea7a97
Add missing aequivalents for PIX_FMT_GRAY8A and PIX_FMT_GRAY16*.
cehoyos
parents:
34923
diff
changeset
|
1139 {"y16le", IMGFMT_Y16_LE}, |
10746
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1140 {"nv12", IMGFMT_NV12}, |
0e5e55232e9d
added nv12/nv21 and some other fourccs (still not synced)
alex
parents:
10660
diff
changeset
|
1141 {"nv21", IMGFMT_NV21}, |
9600 | 1142 {"bgr24", IMGFMT_BGR24}, |
1143 {"bgr32", IMGFMT_BGR32}, | |
1144 {"bgr16", IMGFMT_BGR16}, | |
1145 {"bgr15", IMGFMT_BGR15}, | |
31082
92f88bb315c5
Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents:
30702
diff
changeset
|
1146 {"bgr12", IMGFMT_BGR12}, |
9600 | 1147 {"bgr8", IMGFMT_BGR8}, |
1148 {"bgr4", IMGFMT_BGR4}, | |
1149 {"bg4b", IMGFMT_BG4B}, | |
1150 {"bgr1", IMGFMT_BGR1}, | |
34572 | 1151 {"rgb64be", IMGFMT_RGB64BE}, |
1152 {"rgb64le", IMGFMT_RGB64LE}, | |
29900
9ebc41cbf893
Support 16-bit-per-component RGB formats (rgb48[bln]e) in option parser.
reimar
parents:
29263
diff
changeset
|
1153 {"rgb48be", IMGFMT_RGB48BE}, |
9ebc41cbf893
Support 16-bit-per-component RGB formats (rgb48[bln]e) in option parser.
reimar
parents:
29263
diff
changeset
|
1154 {"rgb48le", IMGFMT_RGB48LE}, |
9ebc41cbf893
Support 16-bit-per-component RGB formats (rgb48[bln]e) in option parser.
reimar
parents:
29263
diff
changeset
|
1155 {"rgb48ne", IMGFMT_RGB48NE}, |
9600 | 1156 {"rgb24", IMGFMT_RGB24}, |
1157 {"rgb32", IMGFMT_RGB32}, | |
1158 {"rgb16", IMGFMT_RGB16}, | |
1159 {"rgb15", IMGFMT_RGB15}, | |
31082
92f88bb315c5
Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents:
30702
diff
changeset
|
1160 {"rgb12", IMGFMT_RGB12}, |
9600 | 1161 {"rgb8", IMGFMT_RGB8}, |
1162 {"rgb4", IMGFMT_RGB4}, | |
1163 {"rg4b", IMGFMT_RG4B}, | |
1164 {"rgb1", IMGFMT_RGB1}, | |
12999 | 1165 {"rgba", IMGFMT_RGBA}, |
1166 {"argb", IMGFMT_ARGB}, | |
1167 {"bgra", IMGFMT_BGRA}, | |
1168 {"abgr", IMGFMT_ABGR}, | |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1169 {"gbr14pbe", IMGFMT_GBR14PLE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1170 {"gbr14ple", IMGFMT_GBR14PBE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1171 {"gbr12pbe", IMGFMT_GBR12PLE}, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
1172 {"gbr12ple", IMGFMT_GBR12PBE}, |
34157 | 1173 {"gbr24p", IMGFMT_GBR24P}, |
23423 | 1174 {"mjpeg", IMGFMT_MJPEG}, |
1175 {"mjpg", IMGFMT_MJPEG}, | |
9600 | 1176 { NULL, 0 } |
1177 }; | |
8164 | 1178 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1179 static int parse_imgfmt(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
8164 | 1180 uint32_t fmt = 0; |
9600 | 1181 int i; |
8164 | 1182 |
1183 if (param == NULL || strlen(param) == 0) | |
1184 return M_OPT_MISSING_PARAM; | |
1185 | |
9600 | 1186 if(!strcmp(param,"help")) { |
10641 | 1187 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available formats:"); |
9600 | 1188 for(i = 0 ; mp_imgfmt_list[i].name ; i++) |
1189 mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %s",mp_imgfmt_list[i].name); | |
1190 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n"); | |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15789
diff
changeset
|
1191 return M_OPT_EXIT - 1; |
9600 | 1192 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1193 |
10597
697688503349
CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents:
10595
diff
changeset
|
1194 if (sscanf(param, "0x%x", &fmt) != 1) |
697688503349
CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents:
10595
diff
changeset
|
1195 { |
9600 | 1196 for(i = 0 ; mp_imgfmt_list[i].name ; i++) { |
1197 if(!strcasecmp(param,mp_imgfmt_list[i].name)) { | |
1198 fmt=mp_imgfmt_list[i].fmt; | |
1199 break; | |
1200 } | |
1201 } | |
1202 if(!mp_imgfmt_list[i].name) { | |
1203 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",name,param); | |
8164 | 1204 return M_OPT_INVALID; |
1205 } | |
10597
697688503349
CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents:
10595
diff
changeset
|
1206 } |
8164 | 1207 |
1208 if(dst) | |
1209 *((uint32_t*)dst) = fmt; | |
1210 | |
1211 return 1; | |
1212 } | |
1213 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1214 const m_option_type_t m_option_type_imgfmt = { |
9600 | 1215 "Image format", |
10641 | 1216 "Please report any missing colorspaces.", |
8164 | 1217 sizeof(uint32_t), |
1218 0, | |
1219 parse_imgfmt, | |
1220 NULL, | |
1221 copy_opt, | |
1222 copy_opt, | |
1223 NULL, | |
1224 NULL | |
1225 }; | |
1226 | |
14246 | 1227 #include "libaf/af_format.h" |
1228 | |
1229 /* FIXME: snyc with af_format.h */ | |
1230 static struct { | |
19194
5949a654e2d4
marks some read-only char* inside structs as const, patch by Stefan Huehner, stefan At huehner-org
reynaldo
parents:
19053
diff
changeset
|
1231 const char* name; |
14246 | 1232 unsigned int fmt; |
1233 } mp_afmt_list[] = { | |
1234 // SPECIAL | |
1235 {"mulaw", AF_FORMAT_MU_LAW}, | |
1236 {"alaw", AF_FORMAT_A_LAW}, | |
1237 {"mpeg2", AF_FORMAT_MPEG2}, | |
30241
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30115
diff
changeset
|
1238 {"ac3le", AF_FORMAT_AC3_LE}, |
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30115
diff
changeset
|
1239 {"ac3be", AF_FORMAT_AC3_BE}, |
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30115
diff
changeset
|
1240 {"ac3ne", AF_FORMAT_AC3_NE}, |
14246 | 1241 {"imaadpcm", AF_FORMAT_IMA_ADPCM}, |
1242 // ORIDNARY | |
1243 {"u8", AF_FORMAT_U8}, | |
1244 {"s8", AF_FORMAT_S8}, | |
1245 {"u16le", AF_FORMAT_U16_LE}, | |
1246 {"u16be", AF_FORMAT_U16_BE}, | |
1247 {"u16ne", AF_FORMAT_U16_NE}, | |
1248 {"s16le", AF_FORMAT_S16_LE}, | |
1249 {"s16be", AF_FORMAT_S16_BE}, | |
1250 {"s16ne", AF_FORMAT_S16_NE}, | |
1251 {"u24le", AF_FORMAT_U24_LE}, | |
1252 {"u24be", AF_FORMAT_U24_BE}, | |
1253 {"u24ne", AF_FORMAT_U24_NE}, | |
1254 {"s24le", AF_FORMAT_S24_LE}, | |
1255 {"s24be", AF_FORMAT_S24_BE}, | |
1256 {"s24ne", AF_FORMAT_S24_NE}, | |
1257 {"u32le", AF_FORMAT_U32_LE}, | |
1258 {"u32be", AF_FORMAT_U32_BE}, | |
1259 {"u32ne", AF_FORMAT_U32_NE}, | |
1260 {"s32le", AF_FORMAT_S32_LE}, | |
1261 {"s32be", AF_FORMAT_S32_BE}, | |
1262 {"s32ne", AF_FORMAT_S32_NE}, | |
1263 {"floatle", AF_FORMAT_FLOAT_LE}, | |
1264 {"floatbe", AF_FORMAT_FLOAT_BE}, | |
1265 {"floatne", AF_FORMAT_FLOAT_NE}, | |
1266 { NULL, 0 } | |
1267 }; | |
1268 | |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1269 static int parse_afmt(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
14246 | 1270 uint32_t fmt = 0; |
1271 int i; | |
1272 | |
1273 if (param == NULL || strlen(param) == 0) | |
1274 return M_OPT_MISSING_PARAM; | |
1275 | |
1276 if(!strcmp(param,"help")) { | |
1277 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available formats:"); | |
1278 for(i = 0 ; mp_afmt_list[i].name ; i++) | |
1279 mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %s",mp_afmt_list[i].name); | |
1280 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n"); | |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15789
diff
changeset
|
1281 return M_OPT_EXIT - 1; |
14246 | 1282 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1283 |
14246 | 1284 if (sscanf(param, "0x%x", &fmt) != 1) |
1285 { | |
1286 for(i = 0 ; mp_afmt_list[i].name ; i++) { | |
1287 if(!strcasecmp(param,mp_afmt_list[i].name)) { | |
1288 fmt=mp_afmt_list[i].fmt; | |
1289 break; | |
1290 } | |
1291 } | |
1292 if(!mp_afmt_list[i].name) { | |
1293 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",name,param); | |
1294 return M_OPT_INVALID; | |
1295 } | |
1296 } | |
1297 | |
1298 if(dst) | |
1299 *((uint32_t*)dst) = fmt; | |
1300 | |
1301 return 1; | |
1302 } | |
1303 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1304 const m_option_type_t m_option_type_afmt = { |
14246 | 1305 "Audio format", |
1306 "Please report any missing formats.", | |
1307 sizeof(uint32_t), | |
1308 0, | |
1309 parse_afmt, | |
1310 NULL, | |
1311 copy_opt, | |
1312 copy_opt, | |
1313 NULL, | |
1314 NULL | |
1315 }; | |
1316 | |
1317 | |
32428
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1318 int parse_timestring(const char *str, double *time, char endchar) |
22312 | 1319 { |
32428
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1320 int a, b, len; |
22312 | 1321 double d; |
32428
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1322 *time = 0; /* ensure initialization for error cases */ |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1323 if (sscanf(str, "%d:%d:%lf%n", &a, &b, &d, &len) >= 3) |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1324 *time = 3600*a + 60*b + d; |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1325 else if (sscanf(str, "%d:%lf%n", &a, &d, &len) >= 2) |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1326 *time = 60*a + d; |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1327 else if (sscanf(str, "%lf%n", &d, &len) >= 1) |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1328 *time = d; |
35590
388b4cc85c0e
Allow "nopts" as time specification, it might be useful in
reimar
parents:
35272
diff
changeset
|
1329 else if (strncasecmp(str, "nopts", 5) == 0) { |
388b4cc85c0e
Allow "nopts" as time specification, it might be useful in
reimar
parents:
35272
diff
changeset
|
1330 *time = MP_NOPTS_VALUE; |
388b4cc85c0e
Allow "nopts" as time specification, it might be useful in
reimar
parents:
35272
diff
changeset
|
1331 len = 5; |
388b4cc85c0e
Allow "nopts" as time specification, it might be useful in
reimar
parents:
35272
diff
changeset
|
1332 } else |
32428
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1333 return 0; /* unsupported time format */ |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1334 if (str[len] && str[len] != endchar) |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1335 return 0; /* invalid extra characters at the end */ |
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1336 return len; |
22312 | 1337 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1338 |
22312 | 1339 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1340 static int parse_time(const m_option_t* opt,const char *name, const char *param, void* dst, int src) |
22312 | 1341 { |
22356 | 1342 double time; |
1343 | |
22312 | 1344 if (param == NULL || strlen(param) == 0) |
1345 return M_OPT_MISSING_PARAM; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1346 |
32428
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1347 if (!parse_timestring(param, &time, 0)) { |
22312 | 1348 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid time: '%s'\n", |
1349 name,param); | |
1350 return M_OPT_INVALID; | |
1351 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1352 |
22312 | 1353 if (dst) |
1354 *(double *)dst = time; | |
1355 return 1; | |
1356 } | |
1357 | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1358 const m_option_type_t m_option_type_time = { |
22312 | 1359 "Time", |
1360 "", | |
1361 sizeof(double), | |
1362 0, | |
1363 parse_time, | |
23415 | 1364 print_double, |
22312 | 1365 copy_opt, |
1366 copy_opt, | |
1367 NULL, | |
1368 NULL | |
1369 }; | |
1370 | |
1371 | |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1372 // Time or size (-endpos) |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1373 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1374 static int parse_time_size(const m_option_t* opt,const char *name, const char *param, void* dst, int src) { |
20003
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1375 m_time_size_t ts; |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1376 char unit[4]; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1377 double end_at; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1378 |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1379 if (param == NULL || strlen(param) == 0) |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1380 return M_OPT_MISSING_PARAM; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1381 |
20003
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1382 ts.pos=0; |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1383 /* End at size parsing */ |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1384 if(sscanf(param, "%lf%3s", &end_at, unit) == 2) { |
20003
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1385 ts.type = END_AT_SIZE; |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1386 if(!strcasecmp(unit, "b")) |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1387 ; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1388 else if(!strcasecmp(unit, "kb")) |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1389 end_at *= 1024; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1390 else if(!strcasecmp(unit, "mb")) |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1391 end_at *= 1024*1024; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1392 else if(!strcasecmp(unit, "gb")) |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1393 end_at *= 1024*1024*1024; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1394 else |
20003
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1395 ts.type = END_AT_NONE; |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1396 |
20003
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1397 if (ts.type == END_AT_SIZE) { |
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1398 ts.pos = end_at; |
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1399 goto out; |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1400 } |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1401 } |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1402 |
22312 | 1403 /* End at time parsing. This has to be last because the parsing accepts |
1404 * even a number followed by garbage */ | |
32428
92b92a78ca2a
Make the parse_timestring public, with a slightly extended API.
cigaes
parents:
32335
diff
changeset
|
1405 if (!parse_timestring(param, &end_at, 0)) { |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1406 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid time or size: '%s'\n", |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1407 name,param); |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1408 return M_OPT_INVALID; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1409 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1410 |
20003
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1411 ts.type = END_AT_TIME; |
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1412 ts.pos = end_at; |
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1413 out: |
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1414 if(dst) |
9f256c4066ff
Fix broken parse_time_size, it would cause MPlayer to parse its parameter twice,
reimar
parents:
19973
diff
changeset
|
1415 *(m_time_size_t *)dst = ts; |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1416 return 1; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1417 } |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1418 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1419 const m_option_type_t m_option_type_time_size = { |
19973
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1420 "Time or size", |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1421 "", |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1422 sizeof(m_time_size_t), |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1423 0, |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1424 parse_time_size, |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1425 NULL, |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1426 copy_opt, |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1427 copy_opt, |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1428 NULL, |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1429 NULL |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1430 }; |
02a18c52a42a
after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents:
19358
diff
changeset
|
1431 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1432 |
10641 | 1433 //// Objects (i.e. filters, etc) settings |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1434 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1435 #include "m_struct.h" |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1436 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1437 #undef VAL |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1438 #define VAL(x) (*(m_obj_settings_t**)(x)) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1439 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1440 static int find_obj_desc(const char* name,const m_obj_list_t* l,const m_struct_t** ret) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1441 int i; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1442 char* n; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1443 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1444 for(i = 0 ; l->list[i] ; i++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1445 n = M_ST_MB(char*,l->list[i],l->name_off); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1446 if(!strcmp(n,name)) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1447 *ret = M_ST_MB(m_struct_t*,l->list[i],l->desc_off); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1448 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1449 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1450 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1451 return 0; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1452 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1453 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1454 static int get_obj_param(const char* opt_name,const char* obj_name, const m_struct_t* desc, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1455 char* str,int* nold,int oldmax,char** dst) { |
18958
a8e681ad7c90
Remove unused variables, patch by Stefan Huehner stefan at huehner org.
diego
parents:
18879
diff
changeset
|
1456 char* eq; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1457 const m_option_t* opt; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1458 int r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1459 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1460 eq = strchr(str,'='); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1461 if(eq && eq == str) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1462 eq = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1463 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1464 if(eq) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1465 char* p = eq + 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1466 if(p[0] == '\0') p = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1467 eq[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1468 opt = m_option_list_find(desc->fields,str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1469 if(!opt) { |
10641 | 1470 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s doesn't have a %s parameter.\n",opt_name,obj_name,str); |
10595
522afd56703c
100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents:
10594
diff
changeset
|
1471 return M_OPT_UNKNOWN; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1472 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1473 r = m_option_parse(opt,str,p,NULL,M_CONFIG_FILE); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1474 if(r < 0) { |
17874 | 1475 if(r > M_OPT_EXIT) |
1476 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while parsing %s parameter %s (%s)\n",opt_name,obj_name,str,p); | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1477 eq[0] = '='; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1478 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1479 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1480 if(dst) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1481 dst[0] = strdup(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1482 dst[1] = p ? strdup(p) : NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1483 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1484 eq[0] = '='; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1485 } else { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1486 if((*nold) >= oldmax) { |
10641 | 1487 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s has only %d params, so you can't give more than %d unnamed params.\n", |
10660 | 1488 opt_name,obj_name,oldmax,oldmax); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1489 return M_OPT_OUT_OF_RANGE; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1490 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1491 opt = &desc->fields[(*nold)]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1492 r = m_option_parse(opt,opt->name,str,NULL,M_CONFIG_FILE); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1493 if(r < 0) { |
17874 | 1494 if(r > M_OPT_EXIT) |
1495 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while parsing %s parameter %s (%s)\n",opt_name,obj_name,opt->name,str); | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1496 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1497 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1498 if(dst) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1499 dst[0] = strdup(opt->name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1500 dst[1] = strdup(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1501 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1502 (*nold)++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1503 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1504 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1505 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1506 |
19053
75327b24e06f
marks several string parameters as const, as they are not modified inside the function, Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents:
18958
diff
changeset
|
1507 static int get_obj_params(const char* opt_name, const char* name,char* params, |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1508 const m_struct_t* desc,char separator, char*** _ret) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1509 int n = 0,nold = 0, nopts,r; |
18958
a8e681ad7c90
Remove unused variables, patch by Stefan Huehner stefan at huehner org.
diego
parents:
18879
diff
changeset
|
1510 char* ptr,*last_ptr = params; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1511 char** ret; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1512 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1513 if(!strcmp(params,"help")) { // Help |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1514 char min[50],max[50]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1515 if(!desc->fields) { |
10641 | 1516 printf("%s doesn't have any options.\n\n",name); |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15789
diff
changeset
|
1517 return M_OPT_EXIT - 1; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1518 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1519 printf("\n Name Type Min Max\n\n"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1520 for(n = 0 ; desc->fields[n].name ; n++) { |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1521 const m_option_t* opt = &desc->fields[n]; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1522 if(opt->type->flags & M_OPT_TYPE_HAS_CHILD) continue; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1523 if(opt->flags & M_OPT_MIN) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1524 sprintf(min,"%-8.0f",opt->min); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1525 else |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1526 strcpy(min,"No"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1527 if(opt->flags & M_OPT_MAX) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1528 sprintf(max,"%-8.0f",opt->max); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1529 else |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1530 strcpy(max,"No"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1531 printf(" %-20.20s %-15.15s %-10.10s %-10.10s\n", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1532 opt->name, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1533 opt->type->name, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1534 min, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1535 max); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1536 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1537 printf("\n"); |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15789
diff
changeset
|
1538 return M_OPT_EXIT - 1; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1539 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1540 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1541 for(nopts = 0 ; desc->fields[nopts].name ; nopts++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1542 /* NOP */; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1543 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1544 // TODO : Check that each opt can be parsed |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1545 r = 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1546 while(last_ptr && last_ptr[0] != '\0') { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1547 ptr = strchr(last_ptr,separator); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1548 if(!ptr) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1549 r = get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,NULL); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1550 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1551 break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1552 } |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1553 if(ptr == last_ptr) { // Empty field, count it and go on |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1554 nold++; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1555 last_ptr = ptr+1; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1556 continue; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1557 } |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1558 ptr[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1559 r = get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,NULL); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1560 ptr[0] = separator; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1561 if(r < 0) break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1562 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1563 last_ptr = ptr+1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1564 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1565 if(r < 0) return r; |
15743 | 1566 if (!last_ptr[0]) // count an empty field at the end, too |
1567 nold++; | |
1568 if (nold > nopts) { | |
1569 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Too many options for %s\n", name); | |
1570 return M_OPT_OUT_OF_RANGE; | |
1571 } | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1572 if(!_ret) // Just test |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1573 return 1; |
15743 | 1574 if (n == 0) // No options or only empty options |
1575 return 1; | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1576 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1577 ret = malloc((n+2)*2*sizeof(char*)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1578 n = nold = 0; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1579 last_ptr = params; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1580 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1581 while(last_ptr && last_ptr[0] != '\0') { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1582 ptr = strchr(last_ptr,separator); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1583 if(!ptr) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1584 get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,&ret[n*2]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1585 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1586 break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1587 } |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1588 if(ptr == last_ptr) { // Empty field, count it and go on |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1589 last_ptr = ptr+1; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1590 nold++; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1591 continue; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1592 } |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1593 ptr[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1594 get_obj_param(opt_name,name,desc,last_ptr,&nold,nopts,&ret[n*2]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1595 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1596 last_ptr = ptr+1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1597 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1598 ret[n*2] = ret[n*2+1] = NULL; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1599 *_ret = ret; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1600 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1601 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1602 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1603 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1604 static int parse_obj_params(const m_option_t* opt,const char *name, |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1605 const char *param, void* dst, int src) { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1606 char** opts; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1607 int r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1608 m_obj_params_t* p = opt->priv; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1609 const m_struct_t* desc; |
27835
28b6709b52a2
Avoid a potential memleak in parse_obj_params in case of a missing
reimar
parents:
25489
diff
changeset
|
1610 char* cpy; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1611 |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1612 // We need the object desc |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1613 if(!p) |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1614 return M_OPT_INVALID; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1615 |
20098 | 1616 desc = p->desc; |
27835
28b6709b52a2
Avoid a potential memleak in parse_obj_params in case of a missing
reimar
parents:
25489
diff
changeset
|
1617 cpy = strdup(param); |
20101
4ccb2a53b859
Avoid memleak when calling parse_obj_params only for syntax-checking (dst == NULL)
reimar
parents:
20098
diff
changeset
|
1618 r = get_obj_params(name,desc->name,cpy,desc,p->separator,dst ? &opts : NULL); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1619 free(cpy); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1620 if(r < 0) |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1621 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1622 if(!dst) |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1623 return 1; |
15743 | 1624 if (!opts) // no arguments given |
1625 return 1; | |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1626 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1627 for(r = 0 ; opts[r] ; r += 2) |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1628 m_struct_set(desc,dst,opts[r],opts[r+1]); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1629 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1630 return 1; |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1631 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1632 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1633 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1634 const m_option_type_t m_option_type_obj_params = { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1635 "Object params", |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1636 "", |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1637 0, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1638 0, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1639 parse_obj_params, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1640 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1641 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1642 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1643 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1644 NULL |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1645 }; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1646 |
10641 | 1647 /// Some predefined types as a definition would be quite lengthy |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1648 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1649 /// Span arguments |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1650 static const m_span_t m_span_params_dflts = { -1, -1 }; |
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1651 static const m_option_t m_span_params_fields[] = { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1652 {"start", M_ST_OFF(m_span_t,start), CONF_TYPE_INT, M_OPT_MIN, 1 ,0, NULL}, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1653 {"end", M_ST_OFF(m_span_t,end), CONF_TYPE_INT, M_OPT_MIN , 1 ,0, NULL}, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1654 { NULL, NULL, 0, 0, 0, 0, NULL } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1655 }; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1656 static const struct m_struct_st m_span_opts = { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1657 "m_span", |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1658 sizeof(m_span_t), |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1659 &m_span_params_dflts, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1660 m_span_params_fields |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1661 }; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1662 const m_obj_params_t m_span_params_def = { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1663 &m_span_opts, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1664 '-' |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1665 }; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1666 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1667 static int parse_obj_settings(const char* opt,char* str,const m_obj_list_t* list, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1668 m_obj_settings_t **_ret, int ret_n) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1669 int r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1670 char *param,**plist = NULL; |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1671 const m_struct_t* desc; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1672 m_obj_settings_t *ret = _ret ? *_ret : NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1673 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1674 |
10641 | 1675 // Now check that the object exists |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1676 param = strchr(str,'='); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1677 if(param) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1678 param[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1679 param++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1680 if(strlen(param) <= 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1681 param = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1682 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1683 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1684 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1685 if(!find_obj_desc(str,list,&desc)) { |
10641 | 1686 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: %s doesn't exist.\n",opt,str); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1687 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1688 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1689 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1690 if(param) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1691 if(!desc && _ret) { |
17874 | 1692 if(!strcmp(param,"help")) { |
1693 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Option %s: %s have no option description.\n",opt,str); | |
1694 return M_OPT_EXIT - 1; | |
1695 } | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1696 plist = calloc(4,sizeof(char*)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1697 plist[0] = strdup("_oldargs_"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1698 plist[1] = strdup(param); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1699 } else if(desc) { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
1700 r = get_obj_params(opt,str,param,desc,':',_ret ? &plist : NULL); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1701 if(r < 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1702 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1703 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1704 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1705 if(!_ret) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1706 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1707 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1708 ret = realloc(ret,(ret_n+2)*sizeof(m_obj_settings_t)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1709 memset(&ret[ret_n],0,2*sizeof(m_obj_settings_t)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1710 ret[ret_n].name = strdup(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1711 ret[ret_n].attribs = plist; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1712 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1713 *_ret = ret; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1714 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1715 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1716 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1717 static int obj_settings_list_del(const char *opt_name,const char *param,void* dst, int src) { |
9913 | 1718 char** str_list = NULL; |
1719 int r,i,idx_max = 0; | |
1720 char* rem_id = "_removed_marker_"; | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1721 const m_option_t list_opt = {opt_name , NULL, CONF_TYPE_STRING_LIST, |
9913 | 1722 0, 0, 0, NULL }; |
1723 m_obj_settings_t* obj_list = dst ? VAL(dst) : NULL; | |
1724 | |
1725 if(dst && !obj_list) { | |
1726 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: the list is empty.\n",opt_name); | |
1727 return 1; | |
1728 } else if(obj_list) { | |
1729 for(idx_max = 0 ; obj_list[idx_max].name != NULL ; idx_max++) | |
1730 /* NOP */; | |
1731 } | |
1732 | |
1733 r = m_option_parse(&list_opt,opt_name,param,&str_list,src); | |
1734 if(r < 0 || !str_list) | |
1735 return r; | |
1736 | |
1737 for(r = 0 ; str_list[r] ; r++) { | |
1738 int id; | |
1739 char* endptr; | |
1740 id = strtol(str_list[r],&endptr,0); | |
1741 if(endptr == str_list[r]) { | |
10660 | 1742 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: invalid parameter. We need a list of integers which are the indices of the elements to remove.\n",opt_name); |
9913 | 1743 m_option_free(&list_opt,&str_list); |
1744 return M_OPT_INVALID; | |
1745 } | |
1746 if(!obj_list) continue; | |
1747 if(id >= idx_max || id < -idx_max) { | |
10641 | 1748 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: Index %d is out of range.\n",opt_name,id); |
9913 | 1749 continue; |
1750 } | |
1751 if(id < 0) | |
1752 id = idx_max + id; | |
1753 free(obj_list[id].name); | |
1754 free_str_list(&(obj_list[id].attribs)); | |
1755 obj_list[id].name = rem_id; | |
1756 } | |
1757 | |
1758 if(!dst) { | |
1759 m_option_free(&list_opt,&str_list); | |
1760 return 1; | |
1761 } | |
1762 | |
1763 for(i = 0 ; obj_list[i].name ; i++) { | |
1764 while(obj_list[i].name == rem_id) { | |
1765 memmove(&obj_list[i],&obj_list[i+1],sizeof(m_obj_settings_t)*(idx_max - i)); | |
1766 idx_max--; | |
1767 } | |
1768 } | |
1769 obj_list = realloc(obj_list,sizeof(m_obj_settings_t)*(idx_max+1)); | |
1770 VAL(dst) = obj_list; | |
1771 | |
1772 return 1; | |
1773 } | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1774 |
32335
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1775 static void free_obj_settings_list(void* dst) { |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1776 int n; |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1777 m_obj_settings_t *d; |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1778 |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1779 if (!dst || !VAL(dst)) return; |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1780 |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1781 d = VAL(dst); |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1782 #ifndef NO_FREE |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1783 for (n = 0 ; d[n].name ; n++) { |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1784 free(d[n].name); |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1785 free_str_list(&(d[n].attribs)); |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1786 } |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1787 free(d); |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1788 #endif |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1789 VAL(dst) = NULL; |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1790 } |
fdf3f93c2828
Move some code around to avoid forward declarations in top-level .c files.
diego
parents:
31834
diff
changeset
|
1791 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1792 static int parse_obj_settings_list(const m_option_t* opt,const char *name, |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1793 const char *param, void* dst, int src) { |
9913 | 1794 int n = 0,r,len = strlen(opt->name); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1795 char *str; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1796 char *ptr, *last_ptr; |
9913 | 1797 m_obj_settings_t *res = NULL,*queue = NULL,*head = NULL; |
1798 int op = OP_NONE; | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1799 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1800 // We need the objects list |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1801 if(!opt->priv) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1802 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1803 |
9913 | 1804 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) { |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1805 const char* n = &name[len-1]; |
9913 | 1806 if(strcasecmp(n,"-add") == 0) |
1807 op = OP_ADD; | |
1808 else if(strcasecmp(n,"-pre") == 0) | |
1809 op = OP_PRE; | |
1810 else if(strcasecmp(n,"-del") == 0) | |
1811 op = OP_DEL; | |
1812 else if(strcasecmp(n,"-clr") == 0) | |
1813 op = OP_CLR; | |
1814 else { | |
1815 char prefix[len]; | |
1816 strncpy(prefix,opt->name,len-1); | |
1817 prefix[len-1] = '\0'; | |
10608 | 1818 mp_msg(MSGT_VFILTER,MSGL_ERR, "Option %s: unknown postfix %s\n" |
1819 "Supported postfixes are:\n" | |
12653 | 1820 " %s-add\n" |
9913 | 1821 " Append the given list to the current list\n\n" |
12653 | 1822 " %s-pre\n" |
9913 | 1823 " Prepend the given list to the current list\n\n" |
12653 | 1824 " %s-del x,y,...\n" |
9913 | 1825 " Remove the given elements. Take the list element index (starting from 0).\n" |
10641 | 1826 " Negative index can be used (i.e. -1 is the last element)\n\n" |
12653 | 1827 " %s-clr\n" |
1828 " Clear the current list.\n",name,n,prefix,prefix,prefix,prefix); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1829 |
10595
522afd56703c
100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents:
10594
diff
changeset
|
1830 return M_OPT_UNKNOWN; |
9913 | 1831 } |
1832 } | |
1833 | |
1834 // Clear the list ?? | |
1835 if(op == OP_CLR) { | |
1836 if(dst) | |
1837 free_obj_settings_list(dst); | |
1838 return 0; | |
1839 } | |
1840 | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1841 if (param == NULL || strlen(param) == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1842 return M_OPT_MISSING_PARAM; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1843 |
9913 | 1844 switch(op) { |
1845 case OP_ADD: | |
1846 if(dst) head = VAL(dst); | |
1847 break; | |
1848 case OP_PRE: | |
1849 if(dst) queue = VAL(dst); | |
1850 break; | |
1851 case OP_DEL: | |
1852 return obj_settings_list_del(name,param,dst,src); | |
1853 case OP_NONE: | |
1854 if(dst && VAL(dst)) | |
1855 free_obj_settings_list(dst); | |
1856 break; | |
1857 default: | |
1858 mp_msg(MSGT_VFILTER,MSGL_ERR, "Option %s: FIXME\n",name); | |
10595
522afd56703c
100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents:
10594
diff
changeset
|
1859 return M_OPT_UNKNOWN; |
9913 | 1860 } |
1861 | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1862 if(!strcmp(param,"help")) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1863 m_obj_list_t* ol = opt->priv; |
14085 | 1864 mp_msg(MSGT_VFILTER,MSGL_INFO,"Available video filters:\n"); |
18237
4231482179b6
Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents:
17874
diff
changeset
|
1865 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FILTERS\n"); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1866 for(n = 0 ; ol->list[n] ; n++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1867 mp_msg(MSGT_VFILTER,MSGL_INFO," %-15s: %s\n", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1868 M_ST_MB(char*,ol->list[n],ol->name_off), |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1869 M_ST_MB(char*,ol->list[n],ol->info_off)); |
17727
096cb1dfb591
Make -xy help output consistent, output an empty line before and after.
diego
parents:
17667
diff
changeset
|
1870 mp_msg(MSGT_VFILTER,MSGL_INFO,"\n"); |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15789
diff
changeset
|
1871 return M_OPT_EXIT - 1; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1872 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1873 ptr = str = strdup(param); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1874 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1875 while(ptr[0] != '\0') { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1876 last_ptr = ptr; |
22133 | 1877 ptr = get_nextsep(ptr, LIST_SEPARATOR, 1); |
20314 | 1878 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1879 if(!ptr) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1880 r = parse_obj_settings(name,last_ptr,opt->priv,dst ? &res : NULL,n); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1881 if(r < 0) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1882 free(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1883 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1884 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1885 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1886 break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1887 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1888 ptr[0] = '\0'; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1889 r = parse_obj_settings(name,last_ptr,opt->priv,dst ? &res : NULL,n); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1890 if(r < 0) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1891 free(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1892 return r; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1893 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1894 ptr++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1895 n++; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1896 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1897 free(str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1898 if(n == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1899 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1900 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1901 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) || |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1902 ((opt->flags & M_OPT_MAX) && (n > opt->max)) ) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1903 return M_OPT_OUT_OF_RANGE; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1904 |
9913 | 1905 if(dst) { |
1906 if(queue) { | |
1907 int qsize; | |
1908 for(qsize = 0 ; queue[qsize].name ; qsize++) | |
1909 /* NOP */; | |
1910 res = realloc(res,(qsize+n+1)*sizeof(m_obj_settings_t)); | |
1911 memcpy(&res[n],queue,(qsize+1)*sizeof(m_obj_settings_t)); | |
1912 n += qsize; | |
1913 free(queue); | |
1914 } | |
1915 if(head) { | |
1916 int hsize; | |
1917 for(hsize = 0 ; head[hsize].name ; hsize++) | |
1918 /* NOP */; | |
1919 head = realloc(head,(hsize+n+1)*sizeof(m_obj_settings_t)); | |
1920 memcpy(&head[hsize],res,(n+1)*sizeof(m_obj_settings_t)); | |
1921 free(res); | |
1922 res = head; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1923 } |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1924 VAL(dst) = res; |
9913 | 1925 } |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1926 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1927 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1928 |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1929 static void copy_obj_settings_list(const m_option_t* opt,void* dst, const void* src) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1930 m_obj_settings_t *d,*s; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1931 int n; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1932 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1933 if(!(dst && src)) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1934 return; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1935 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1936 s = VAL(src); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1937 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1938 if(VAL(dst)) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1939 free_obj_settings_list(dst); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1940 if(!s) return; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1941 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1942 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1943 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1944 for(n = 0 ; s[n].name ; n++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1945 /* NOP */; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1946 d = malloc((n+1)*sizeof(m_obj_settings_t)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1947 for(n = 0 ; s[n].name ; n++) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1948 d[n].name = strdup(s[n].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1949 d[n].attribs = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1950 copy_str_list(NULL,&(d[n].attribs),&(s[n].attribs)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1951 } |
10236 | 1952 d[n].name = NULL; |
1953 d[n].attribs = NULL; | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1954 VAL(dst) = d; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1955 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1956 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1957 const m_option_type_t m_option_type_obj_settings_list = { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1958 "Object settings list", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1959 "", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1960 sizeof(m_obj_settings_t*), |
9913 | 1961 M_OPT_TYPE_DYNAMIC|M_OPT_TYPE_ALLOW_WILDCARD, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1962 parse_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1963 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1964 copy_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1965 copy_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1966 copy_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1967 free_obj_settings_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1968 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1969 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1970 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1971 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
1972 static int parse_obj_presets(const m_option_t* opt,const char *name, |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
1973 const char *param, void* dst, int src) { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1974 m_obj_presets_t* obj_p = (m_obj_presets_t*)opt->priv; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1975 m_struct_t *in_desc,*out_desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1976 int s,i; |
20097 | 1977 unsigned char* pre; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1978 char* pre_name = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1979 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1980 if(!obj_p) { |
10641 | 1981 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Presets need a pointer to a m_obj_presets_t in the priv field.\n",name); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1982 return M_OPT_PARSER_ERR; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1983 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1984 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1985 if(!param) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1986 return M_OPT_MISSING_PARAM; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1987 |
20097 | 1988 pre = obj_p->presets; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1989 in_desc = obj_p->in_desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1990 out_desc = obj_p->out_desc ? obj_p->out_desc : obj_p->in_desc; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1991 s = in_desc->size; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1992 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1993 if(!strcmp(param,"help")) { |
10641 | 1994 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available presets for %s->%s:",out_desc->name,name); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1995 for(pre = obj_p->presets;(pre_name = M_ST_MB(char*,pre,obj_p->name_off)) ; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
1996 pre += s) |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1997 mp_msg(MSGT_CFGPARSER, MSGL_ERR, " %s",pre_name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
1998 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "\n"); |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15789
diff
changeset
|
1999 return M_OPT_EXIT - 1; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2000 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2001 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2002 for(pre_name = M_ST_MB(char*,pre,obj_p->name_off) ; pre_name ; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2003 pre += s, pre_name = M_ST_MB(char*,pre,obj_p->name_off)) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2004 if(!strcmp(pre_name,param)) break; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2005 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2006 if(!pre_name) { |
10641 | 2007 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: There is no preset named %s\n" |
2008 "Available presets are:",name,param); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2009 for(pre = obj_p->presets;(pre_name = M_ST_MB(char*,pre,obj_p->name_off)) ; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2010 pre += s) |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2011 mp_msg(MSGT_CFGPARSER, MSGL_ERR, " %s",pre_name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2012 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "\n"); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2013 return M_OPT_INVALID; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2014 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2015 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2016 if(!dst) return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2017 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2018 for(i = 0 ; in_desc->fields[i].name ; i++) { |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
2019 const m_option_t* out_opt = m_option_list_find(out_desc->fields, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2020 in_desc->fields[i].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2021 if(!out_opt) { |
10641 | 2022 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Unable to find the target option for field %s.\nPlease report this to the developers.\n",name,in_desc->fields[i].name); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2023 return M_OPT_PARSER_ERR; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2024 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2025 m_option_copy(out_opt,M_ST_MB_P(dst,out_opt->p),M_ST_MB_P(pre,in_desc->fields[i].p)); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2026 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2027 return 1; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2028 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2029 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2030 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
2031 const m_option_type_t m_option_type_obj_presets = { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2032 "Object presets", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2033 "", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2034 0, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2035 0, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2036 parse_obj_presets, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2037 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2038 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2039 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2040 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2041 NULL |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2042 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9177
diff
changeset
|
2043 |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
2044 static int parse_custom_url(const m_option_t* opt,const char *name, |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
2045 const char *url, void* dst, int src) { |
11771
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2046 int pos1, pos2, r, v6addr = 0; |
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2047 char *ptr1=NULL, *ptr2=NULL, *ptr3=NULL, *ptr4=NULL; |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2048 m_struct_t* desc = opt->priv; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2049 |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2050 if(!desc) { |
10641 | 2051 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Custom URL needs a pointer to a m_struct_t in the priv field.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2052 return M_OPT_PARSER_ERR; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2053 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2054 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2055 // extract the protocol |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2056 ptr1 = strstr(url, "://"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2057 if( ptr1==NULL ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2058 // Filename only |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2059 if(m_option_list_find(desc->fields,"filename")) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2060 m_struct_set(desc,dst,"filename",url); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2061 return 1; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2062 } |
10641 | 2063 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Option %s: URL doesn't have a valid protocol!\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2064 return M_OPT_INVALID; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2065 } |
15460
fa8c3f5b7ec2
introduced -string- parameter to match everything after :// syntax
nicodvb
parents:
14246
diff
changeset
|
2066 if(m_option_list_find(desc->fields,"string")) { |
fa8c3f5b7ec2
introduced -string- parameter to match everything after :// syntax
nicodvb
parents:
14246
diff
changeset
|
2067 if(strlen(ptr1)>3) { |
fa8c3f5b7ec2
introduced -string- parameter to match everything after :// syntax
nicodvb
parents:
14246
diff
changeset
|
2068 m_struct_set(desc,dst,"string",ptr1+3); |
fa8c3f5b7ec2
introduced -string- parameter to match everything after :// syntax
nicodvb
parents:
14246
diff
changeset
|
2069 return 1; |
fa8c3f5b7ec2
introduced -string- parameter to match everything after :// syntax
nicodvb
parents:
14246
diff
changeset
|
2070 } |
fa8c3f5b7ec2
introduced -string- parameter to match everything after :// syntax
nicodvb
parents:
14246
diff
changeset
|
2071 } |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2072 pos1 = ptr1-url; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2073 if(dst && m_option_list_find(desc->fields,"protocol")) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2074 ptr1[0] = '\0'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2075 r = m_struct_set(desc,dst,"protocol",url); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2076 ptr1[0] = ':'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2077 if(r < 0) { |
10641 | 2078 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting protocol.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2079 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2080 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2081 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2082 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2083 // jump the "://" |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2084 ptr1 += 3; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2085 pos1 += 3; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2086 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2087 // check if a username:password is given |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2088 ptr2 = strstr(ptr1, "@"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2089 ptr3 = strstr(ptr1, "/"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2090 if( ptr3!=NULL && ptr3<ptr2 ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2091 // it isn't really a username but rather a part of the path |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2092 ptr2 = NULL; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2093 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2094 if( ptr2!=NULL ) { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2095 |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2096 // We got something, at least a username... |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2097 if(!m_option_list_find(desc->fields,"username")) { |
10641 | 2098 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a username part.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2099 // skip |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2100 } else { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2101 ptr3 = strstr(ptr1, ":"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2102 if( ptr3!=NULL && ptr3<ptr2 ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2103 // We also have a password |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2104 if(!m_option_list_find(desc->fields,"password")) { |
10641 | 2105 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a password part.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2106 // skip |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2107 } else { // Username and password |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2108 if(dst) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2109 ptr3[0] = '\0'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2110 r = m_struct_set(desc,dst,"username",ptr1); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2111 ptr3[0] = ':'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2112 if(r < 0) { |
10641 | 2113 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting username.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2114 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2115 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2116 ptr2[0] = '\0'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2117 r = m_struct_set(desc,dst,"password",ptr3+1); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2118 ptr2[0] = '@'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2119 if(r < 0) { |
10641 | 2120 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting password.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2121 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2122 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2123 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2124 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2125 } else { // User name only |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2126 ptr2[0] = '\0'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2127 r = m_struct_set(desc,dst,"username",ptr1); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2128 ptr2[0] = '@'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2129 if(r < 0) { |
10641 | 2130 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting username.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2131 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2132 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2133 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2134 } |
10592
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2135 ptr1 = ptr2+1; |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2136 pos1 = ptr1-url; |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2137 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2138 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2139 // before looking for a port number check if we have an IPv6 type numeric address |
10641 | 2140 // in an IPv6 URL the numeric address should be inside square braces. |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2141 ptr2 = strstr(ptr1, "["); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2142 ptr3 = strstr(ptr1, "]"); |
11771
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2143 // If the [] is after the first it isn't the hostname |
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2144 ptr4 = strstr(ptr1, "/"); |
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2145 if( ptr2!=NULL && ptr3!=NULL && (ptr2 < ptr3) && (!ptr4 || ptr4 > ptr3)) { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2146 // we have an IPv6 numeric address |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2147 ptr1++; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2148 pos1++; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2149 ptr2 = ptr3; |
11771
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2150 v6addr = 1; |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2151 } else { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2152 ptr2 = ptr1; |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2153 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2154 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2155 // look if the port is given |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2156 ptr2 = strstr(ptr2, ":"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2157 // If the : is after the first / it isn't the port |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2158 ptr3 = strstr(ptr1, "/"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2159 if(ptr3 && ptr3 - ptr2 < 0) ptr2 = NULL; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2160 if( ptr2==NULL ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2161 // No port is given |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2162 // Look if a path is given |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2163 if( ptr3==NULL ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2164 // No path/filename |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2165 // So we have an URL like http://www.hostname.com |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2166 pos2 = strlen(url); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2167 } else { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2168 // We have an URL like http://www.hostname.com/file.txt |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2169 pos2 = ptr3-url; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2170 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2171 } else { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2172 // We have an URL beginning like http://www.hostname.com:1212 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2173 // Get the port number |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2174 if(!m_option_list_find(desc->fields,"port")) { |
10641 | 2175 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a port part.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2176 // skip |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2177 } else { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2178 if(dst) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2179 int p = atoi(ptr2+1); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2180 char tmp[100]; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2181 snprintf(tmp,99,"%d",p); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2182 r = m_struct_set(desc,dst,"port",tmp); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2183 if(r < 0) { |
10641 | 2184 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting port.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2185 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2186 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2187 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2188 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2189 pos2 = ptr2-url; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2190 } |
11771
827cae571c5c
Fix long standing bug where last (and sometimes first) char of the
albeu
parents:
11688
diff
changeset
|
2191 if( v6addr ) pos2--; |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2192 // Get the hostname |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2193 if(pos2-pos1 > 0) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2194 if(!m_option_list_find(desc->fields,"hostname")) { |
10641 | 2195 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a hostname part.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2196 // skip |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2197 } else { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2198 char tmp[pos2-pos1+1]; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2199 strncpy(tmp,ptr1, pos2-pos1); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2200 tmp[pos2-pos1] = '\0'; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2201 r = m_struct_set(desc,dst,"hostname",tmp); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2202 if(r < 0) { |
10641 | 2203 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting hostname.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2204 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2205 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2206 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2207 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2208 // Look if a path is given |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2209 ptr2 = strstr(ptr1, "/"); |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2210 if( ptr2!=NULL ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2211 // A path/filename is given |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2212 // check if it's not a trailing '/' |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2213 if( strlen(ptr2)>1 ) { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2214 // copy the path/filename in the URL container |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2215 if(!m_option_list_find(desc->fields,"filename")) { |
10641 | 2216 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: This URL doesn't have a hostname part.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2217 // skip |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2218 } else { |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2219 if(dst) { |
10592
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2220 int l = strlen(ptr2+1) + 1; |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2221 char* fname = ptr2+1; |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2222 if(l > 1) { |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2223 fname = malloc(l); |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2224 url_unescape_string(fname,ptr2+1); |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2225 } |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2226 r = m_struct_set(desc,dst,"filename",fname); |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2227 if(fname != ptr2+1) |
98c885b1ff06
Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents:
10397
diff
changeset
|
2228 free(fname); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2229 if(r < 0) { |
10641 | 2230 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Error while setting filename.\n",name); |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2231 return r; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2232 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2233 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2234 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2235 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2236 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2237 return 1; |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2238 } |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2239 |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2240 /// TODO : Write the other needed funcs for 'normal' options |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23703
diff
changeset
|
2241 const m_option_type_t m_option_type_custom_url = { |
9791
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2242 "Custom URL", |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2243 "", |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2244 0, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2245 0, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2246 parse_custom_url, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2247 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2248 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2249 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2250 NULL, |
c5b63e88253d
Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents:
9600
diff
changeset
|
2251 NULL |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28768
diff
changeset
|
2252 }; |