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