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