annotate m_option.c @ 13252:7dfd84faaa09

Some minor vo_jpeg fixes: Removed unused variable dst. MPlayer now exits if it is unable to create a file for JPEG output and prints an appropriate message, instead of going on if all is right (which is not). Added line to authors file.
author ivo
date Sun, 05 Sep 2004 17:54:09 +0000
parents bc8cda64ad7f
children a56f68304ea2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1 #include "config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
3 #include <stdlib.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
4 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
5 #include <math.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
6 #include <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
7 #include <stdarg.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
8 #include <inttypes.h>
8262
103a2758f9c5 FreeBSD fix
nexus
parents: 8168
diff changeset
9 #include <unistd.h>
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
10
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 //#include "m_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 #include "mp_msg.h"
11412
ec3dac7d17a0 Warning fixes (approved by A'rpi).
rathann
parents: 11261
diff changeset
14 #include "libmpdemux/url.h"
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
15
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
16 // 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
17 #ifndef MP_DEBUG
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
18 #define NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
19 #endif
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
20
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
21 m_option_t* m_option_list_find(m_option_t* list,char* name) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
22 int i;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
23
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
24 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
25 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
26 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
27 (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
28 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
29 return &list[i];
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
30 } 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
31 return &list[i];
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
32 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
33 return NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
34 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
35
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
36 // Default function that just does a memcpy
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
38 static void copy_opt(m_option_t* opt,void* dst,void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
39 if(dst && src)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
40 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 // Helper for the print funcs (from man printf)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
44 static char* dup_printf(const char *fmt, ...) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
45 /* Guess we need no more than 50 bytes. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46 int n, size = 50;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
47 char *p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
48 va_list ap;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49 if ((p = malloc (size)) == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
50 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
51 while (1) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
52 /* Try to print in the allocated space. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
53 va_start(ap, fmt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54 n = vsnprintf (p, size, fmt, ap);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55 va_end(ap);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
56 /* If that worked, return the string. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
57 if (n > -1 && n < size)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
58 return p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
59 /* Else try again with more space. */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
60 if (n > -1) /* glibc 2.1 */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
61 size = n+1; /* precisely what is needed */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
62 else /* glibc 2.0 */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
63 size *= 2; /* twice the old size */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
64 if ((p = realloc (p, size)) == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
65 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
66 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
67 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
68
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
69
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
70 // Flag
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
71
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
72 #define VAL(x) (*(int*)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
73
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
74 static int parse_flag(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
75 if (src == M_CONFIG_FILE) {
10355
b39a943c902f Fix the segfault in case of missing arg for flag options
albeu
parents: 10236
diff changeset
76 if(!param) return M_OPT_MISSING_PARAM;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
77 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
78 !strcasecmp(param, "on") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
79 !strcasecmp(param, "ja") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
80 !strcasecmp(param, "si") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 !strcasecmp(param, "igen") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
82 !strcasecmp(param, "y") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83 !strcasecmp(param, "j") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84 !strcasecmp(param, "i") ||
11781
03baca2aa79c polish yes/no options support
wight
parents: 11771
diff changeset
85 !strcasecmp(param, "tak") ||
11785
3f488aa0d646 swedish yes/no options support
wight
parents: 11781
diff changeset
86 !strcasecmp(param, "ja") ||
12775
470c2e531d10 make config accept true/false as parameters
iive
parents: 12653
diff changeset
87 !strcasecmp(param, "true") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
88 !strcmp(param, "1")) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
89 if(dst) VAL(dst) = opt->max;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
90 } 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
91 !strcasecmp(param, "off") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 !strcasecmp(param, "nein") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 !strcasecmp(param, "nicht") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
94 !strcasecmp(param, "nem") ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
95 !strcasecmp(param, "n") ||
11781
03baca2aa79c polish yes/no options support
wight
parents: 11771
diff changeset
96 !strcasecmp(param, "nie") ||
11785
3f488aa0d646 swedish yes/no options support
wight
parents: 11781
diff changeset
97 !strcasecmp(param, "nej") ||
12775
470c2e531d10 make config accept true/false as parameters
iive
parents: 12653
diff changeset
98 !strcasecmp(param, "false") ||
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
99 !strcmp(param, "0")) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
100 if(dst) VAL(dst) = opt->min;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
101 } else {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
102 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid parameter for %s flag: %s\n",name, param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
103 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
106 } else {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 if(dst) VAL(dst) = opt->max;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
108 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 static char* print_flag(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
113 if(VAL(val) == opt->min)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
114 return strdup("no");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
115 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 return strdup("yes");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
119 m_option_type_t m_option_type_flag = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
120 "Flag",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
121 "need yes or no in config files",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
122 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
123 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
124 parse_flag,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 print_flag,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
132 // Integer
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 static int parse_int(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135 long tmp_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136 char *endptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137 src = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142 tmp_int = strtol(param, &endptr, 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 if (*endptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
144 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",name, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
145 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
146 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
147
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
148 if ((opt->flags & M_OPT_MIN) && (tmp_int < opt->min)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %d: %s\n", name, (int) opt->min, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
151 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
153 if ((opt->flags & M_OPT_MAX) && (tmp_int > opt->max)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
154 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %d: %s\n",name, (int) opt->max, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
158 if(dst) VAL(dst) = tmp_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
159
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
160 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
161 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
162
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
163 static char* print_int(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
164 opt = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
165 return dup_printf("%d",VAL(val));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
167
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168 m_option_type_t m_option_type_int = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
169 "Integer",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
170 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
171 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173 parse_int,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 print_int,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
175 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
178 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
181 // Float
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
183 #undef VAL
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
184 #define VAL(x) (*(double*)(x))
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
186 static int parse_double(m_option_t* opt,char *name, char *param, void* dst, int src) {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
187 double tmp_float;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188 char* endptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
189 src = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
190
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
192 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
193
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
194 tmp_float = strtod(param, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196 switch(*endptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 case ':':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198 case '/':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199 tmp_float /= strtod(endptr+1, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 case '.':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
202 case ',':
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
203 /* we also handle floats specified with
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 * non-locale decimal point ::atmos
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205 */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 if(tmp_float<0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207 tmp_float -= 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 tmp_float += 1.0/pow(10,strlen(endptr+1)) * strtod(endptr+1, &endptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
210 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
211 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
212
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
213 if (*endptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
214 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be a floating point "
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
215 "number or a ratio (numerator[:/]denominator): %s\n",name, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
216 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
217 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
218
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
219 if (opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
220 if (tmp_float < opt->min) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
221 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be >= %f: %s\n", name, opt->min, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
222 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
223 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
224
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
225 if (opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
226 if (tmp_float > opt->max) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be <= %f: %s\n", name, opt->max, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
228 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
230
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
231 if(dst) VAL(dst) = tmp_float;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
233 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
234
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
235 static char* print_double(m_option_t* opt, void* val) {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
236 opt = NULL;
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
237 return dup_printf("%f",VAL(val));
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
238 }
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
239
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
240 m_option_type_t m_option_type_double = {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
241 "Double",
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
242 "double precission floating point number or ratio (numerator[:/]denominator)",
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
243 sizeof(double),
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
244 0,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
245 parse_double,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
246 print_double,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
247 copy_opt,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
248 copy_opt,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
249 NULL,
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
250 NULL
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
251 };
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
252
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
253 #undef VAL
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
254 #define VAL(x) (*(float*)(x))
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
255
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
256 static int parse_float(m_option_t* opt,char *name, char *param, void* dst, int src) {
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
257 double tmp;
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
258 int r= parse_double(opt, name, param, &tmp, src);
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
259 if(r==1 && dst) VAL(dst) = tmp;
11950
1d32c7c7355c 100l (cvs commit + tired ...)
michael
parents: 11947
diff changeset
260 return r;
11947
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
261 }
3ccd5dcf447c m_option_type_double
michael
parents: 11785
diff changeset
262
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
263 static char* print_float(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
264 opt = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
265 return dup_printf("%f",VAL(val));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
266 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
267
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
268 m_option_type_t m_option_type_float = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
269 "Float",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270 "floating point number or ratio (numerator[:/]denominator)",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
271 sizeof(float),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
272 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
273 parse_float,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
274 print_float,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
275 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
276 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
277 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
278 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
279 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
280
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
281 ///////////// Position
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
282 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
283 #define VAL(x) (*(off_t*)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
284
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
285 static int parse_position(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
286 off_t tmp_off;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
287 char dummy;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
288
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
289 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
290 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
291 if (sscanf(param, sizeof(off_t) == sizeof(int) ?
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
292 "%d%c" : "%lld%c", &tmp_off, &dummy) != 1) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
293 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The %s option must be an integer: %s\n",opt->name,param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
294 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
295 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
296
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
297 if (opt->flags & M_OPT_MIN)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
298 if (tmp_off < opt->min) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
299 mp_msg(MSGT_CFGPARSER, MSGL_ERR,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
300 (sizeof(off_t) == sizeof(int) ?
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
301 "The %s option must be >= %d: %s\n" :
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
302 "The %s option must be >= %lld: %s\n"),
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
303 name, (off_t) opt->min, param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
304 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
305 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
306
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
307 if (opt->flags & M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
308 if (tmp_off > opt->max) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
309 mp_msg(MSGT_CFGPARSER, MSGL_ERR,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
310 (sizeof(off_t) == sizeof(int) ?
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
311 "The %s option must be <= %d: %s\n" :
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
312 "The %s option must be <= %lld: %s\n"),
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
313 name, (off_t) opt->max, param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
314 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
315 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
316
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
317 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
318 VAL(dst) = tmp_off;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
319 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
320 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
321
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
322 static char* print_position(m_option_t* opt, void* val) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
323 return dup_printf(sizeof(off_t) == sizeof(int) ? "%d" : "%lld",VAL(val));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
324 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
325
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
326 m_option_type_t m_option_type_position = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
327 "Position",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
328 "Integer (off_t)",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
329 sizeof(off_t),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
330 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
331 parse_position,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
332 print_position,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
333 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
334 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
335 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
336 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
337 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
338
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
339
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
340 ///////////// String
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
341
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
342 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
343 #define VAL(x) (*(char**)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
344
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
345 static int parse_str(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
346
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
347
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
348 if (param == NULL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
349 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
350
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
351 if ((opt->flags & M_OPT_MIN) && (strlen(param) < opt->min)) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
352 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Parameter must be >= %d chars: %s\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
353 (int) opt->min, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
354 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
355 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
356
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
357 if ((opt->flags & M_OPT_MAX) && (strlen(param) > opt->max)) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
358 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Parameter must be <= %d chars: %s\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
359 (int) opt->max, param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
360 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
361 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
362
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
363 if(dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
364 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
365 free(VAL(dst));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
366 VAL(dst) = strdup(param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
367 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
368
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
369 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
370
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
371 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
372
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
373 static char* print_str(m_option_t* opt, void* val) {
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
374 return (val && VAL(val) && strlen(VAL(val)) > 0) ? strdup(VAL(val)) : NULL;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
375 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
376
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
377 static void copy_str(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
378 if(dst && src) {
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
379 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
380 if(VAL(dst)) free(VAL(dst)); //FIXME!!!
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
381 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
382 VAL(dst) = VAL(src) ? strdup(VAL(src)) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
383 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
384 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
385
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
386 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
387 if(src && VAL(src)){
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
388 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
389 free(VAL(src)); //FIXME!!!
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
390 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
391 VAL(src) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
392 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
393 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
394
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
395 m_option_type_t m_option_type_string = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
396 "String",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
397 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
398 sizeof(char*),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
399 M_OPT_TYPE_DYNAMIC,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
400 parse_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
401 print_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
402 copy_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
403 copy_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
404 copy_str,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
405 free_str
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
406 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
407
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
408 //////////// String list
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
409
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
410 #define LIST_SEPARATOR ','
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
411 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
412 #define VAL(x) (*(char***)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
413
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
414 #define OP_NONE 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
415 #define OP_ADD 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
416 #define OP_PRE 2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
417 #define OP_DEL 3
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
418 #define OP_CLR 4
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
419
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
420 static void free_str_list(void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
421 char** d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
422 int i;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
423
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
424 if(!dst || !VAL(dst)) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
425 d = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
426
9177
01a713dcaf23 disable free() in string and string_list parsers. yes, it's a hack
arpi
parents: 8736
diff changeset
427 // FIXME!!!
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
428 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
429 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
430 free(d[i]);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
431 free(d);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
432 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
433 VAL(dst) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
434 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
435
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
436 static int str_list_add(char** add, int n,void* dst,int pre) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
437 char** lst = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
438 int ln;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
439
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
440 if(!dst) return M_OPT_PARSER_ERR;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
441 lst = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
442
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
443 for(ln = 0 ; lst && lst[ln] ; ln++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
444 /**/;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
445
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
446 lst = realloc(lst,(n+ln+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
447
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
448 if(pre) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
449 memmove(&lst[n],lst,(ln+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
450 memcpy(lst,add,n*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
451 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
452 memcpy(&lst[ln],add,(n+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
453
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
454 free(add);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
455
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
456 VAL(dst) = lst;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
457
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
458 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
459 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
460
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
461 static int str_list_del(char** del, int n,void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
462 char **lst,*ep,**d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
463 int i,ln,s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
464 long idx;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
465
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
466 if(!dst) return M_OPT_PARSER_ERR;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
467 lst = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
468
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
469 for(ln = 0 ; lst && lst[ln] ; ln++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
470 /**/;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
471 s = ln;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
472
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
473 for(i = 0 ; del[i] != NULL ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
474 idx = strtol(del[i], &ep, 0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
475 if(*ep) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
476 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid index: %s\n",del[i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
477 free(del[i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
478 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
479 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
480 free(del[i]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
481 if(idx < 0 || idx >= ln) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
482 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Index %ld is out of range.\n",idx);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
483 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
484 } else if(!lst[idx])
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
485 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
486 free(lst[idx]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
487 lst[idx] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
488 s--;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
489 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
490 free(del);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
491
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
492 if(s == 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
493 if(lst) free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
494 VAL(dst) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
495 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
496 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
497
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
498 d = calloc(s+1,sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
499 for(i = 0, n = 0 ; i < ln ; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
500 if(!lst[i]) continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
501 d[n] = lst[i];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
502 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
503 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
504 d[s] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
505
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
506 if(lst) free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
507 VAL(dst) = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
508
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
509 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
510 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
511
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
512
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
513 static int parse_str_list(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
514 int n = 0,len = strlen(opt->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
515 char *ptr = param, *last_ptr, **res;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
516 int op = OP_NONE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
517
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
518 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
519 char* n = &name[len-1];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
520 if(strcasecmp(n,"-add") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
521 op = OP_ADD;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
522 else if(strcasecmp(n,"-pre") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
523 op = OP_PRE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
524 else if(strcasecmp(n,"-del") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
525 op = OP_DEL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
526 else if(strcasecmp(n,"-clr") == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
527 op = OP_CLR;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
528 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
529 return M_OPT_UNKNOWN;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
530 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
531
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
532 // Clear the list ??
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
533 if(op == OP_CLR) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
534 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
535 free_str_list(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
536 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
537 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
538
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
539 // All other ops need a param
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
540 if (param == NULL || strlen(param) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
541 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
542
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
543
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
544 while(ptr[0] != '\0') {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
545 last_ptr = ptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
546 ptr = strchr(ptr,LIST_SEPARATOR);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
547 if(!ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
548 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
549 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
550 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
551 ptr++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
552 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
553 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
554 if(n == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
555 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
556 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) ||
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
557 ((opt->flags & M_OPT_MAX) && (n > opt->max)) )
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
558 return M_OPT_OUT_OF_RANGE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
559
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
560 if(!dst) return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
561
8384
7a7980b874f5 fixed 'mplayer -nosound xxx' sig11 if configfile have string list options
arpi
parents: 8262
diff changeset
562 res = malloc((n+2)*sizeof(char*));
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
563 ptr = param;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
564 n = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
565
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
566 while(1) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
567 last_ptr = ptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
568 ptr = strchr(ptr,LIST_SEPARATOR);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
569 if(!ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
570 res[n] = strdup(last_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
571 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
572 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
573 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
574 len = ptr - last_ptr;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
575 res[n] = (char*)malloc(len + 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
576 if(len) strncpy(res[n],last_ptr,len);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
577 res[n][len] = '\0';
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
578 ptr++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
579 n++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
580 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
581 res[n] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
582
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
583 switch(op) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
584 case OP_ADD:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
585 return str_list_add(res,n,dst,0);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
586 case OP_PRE:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
587 return str_list_add(res,n,dst,1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
588 case OP_DEL:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
589 return str_list_del(res,n,dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
590 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
591
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
592 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
593 free_str_list(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
594 VAL(dst) = res;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
595
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
596 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
597 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
598
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
599 static void copy_str_list(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
600 int n;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
601 char **d,**s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
602
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
603 if(!(dst && src)) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
604 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
605
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
606 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
607 free_str_list(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
608
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
609 if(!s) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
610 VAL(dst) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
611 return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
612 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
613
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
614 for(n = 0 ; s[n] != NULL ; n++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
615 /* NOTHING */;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
616 d = (char**)malloc((n+1)*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
617 for( ; n >= 0 ; n--)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
618 d[n] = s[n] ? strdup(s[n]) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
619
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
620 VAL(dst) = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
621 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
622
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
623 static char* print_str_list(m_option_t* opt, void* src) {
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
624 char **lst = NULL;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
625 char *ret = NULL,*last = NULL;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
626 int i;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
627
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
628 if(!(src && VAL(src))) return NULL;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
629 lst = VAL(src);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
630
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
631 for(i = 0 ; lst[i] ; i++) {
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
632 if(last) {
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
633 ret = dup_printf("%s,%s",last,lst[i]);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
634 free(last);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
635 } else
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
636 ret = strdup(lst[i]);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
637 last = ret;
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
638 }
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
639 if(last && last != ret) free(last);
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
640 return ret;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
641 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
642
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
643 m_option_type_t m_option_type_string_list = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
644 "String list",
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
645 "A list of strings separated by ','\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
646 "Option with a name ending in an * permits using the following suffix: \n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
647 "\t-add: Add the given parameters at the end of the list.\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
648 "\t-pre: Add the given parameters at the begining of the list.\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
649 "\t-del: Remove the entry at the given indices.\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
650 "\t-clr: Clear the list.\n"
11261
835822ce4bb1 -vop ---> -vf
diego
parents: 10746
diff changeset
651 "e.g: -vf-add flip,mirror -vf-del 2,5\n",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
652 sizeof(char**),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
653 M_OPT_TYPE_DYNAMIC | M_OPT_TYPE_ALLOW_WILDCARD,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
654 parse_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
655 print_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
656 copy_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
657 copy_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
658 copy_str_list,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
659 free_str_list
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
660 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
661
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
662
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
663 /////////////////// Func based options
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
664
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
665 // A chained list to save the various calls for func_param and func_full
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
666 typedef struct m_func_save m_func_save_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
667 struct m_func_save {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
668 m_func_save_t* next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
669 char* name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
670 char* param;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
671 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
672
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
673 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
674 #define VAL(x) (*(m_func_save_t**)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
675
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
676 static void free_func_pf(void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
677 m_func_save_t *s,*n;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
678
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
679 if(!src) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
680
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
681 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
682
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
683 while(s) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
684 n = s->next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
685 free(s->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
686 if(s->param) free(s->param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
687 free(s);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
688 s = n;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
689 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
690 VAL(src) = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
691 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
692
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
693 // Parser for func_param and func_full
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
694 static int parse_func_pf(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
695 m_func_save_t *s,*p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
696
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
697 if(!dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
698 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
699
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
700 s = (m_func_save_t*)calloc(1,sizeof(m_func_save_t));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
701 s->name = strdup(name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
702 s->param = param ? strdup(param) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
703
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
704 p = VAL(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
705 if(p) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
706 for( ; p->next != NULL ; p = p->next)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
707 /**/;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
708 p->next = s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
709 } else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
710 VAL(dst) = s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
711
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
712 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
713 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
714
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
715 static void copy_func_pf(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
716 m_func_save_t *d = NULL, *s,* last = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
717
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
718 if(!(dst && src)) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
719 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
720
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
721 if(VAL(dst))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
722 free_func_pf(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
723
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
724 while(s) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
725 d = (m_func_save_t*)malloc(sizeof(m_func_save_t));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
726 d->name = strdup(s->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
727 d->param = s->param ? strdup(s->param) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
728 if(last)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
729 last->next = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
730 else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
731 VAL(dst) = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
732 last = d;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
733 s = s->next;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
734 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
735
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
736
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
737 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
738
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
739 /////////////////// Func_param
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
740
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
741 static void set_func_param(m_option_t* opt, void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
742 m_func_save_t* s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
743
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
744 if(!src) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
745 s = VAL(src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
746
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
747 if(!s) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
748
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
749 // Revert if needed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
750 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
751 for( ; s != NULL ; s = s->next)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
752 ((m_opt_func_param_t) opt->p)(opt,s->param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
753 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
754
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
755 m_option_type_t m_option_type_func_param = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
756 "Func param",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
757 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
758 sizeof(m_func_save_t*),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
759 M_OPT_TYPE_INDIRECT,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
760 parse_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
761 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
762 NULL, // Nothing to do on save
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
763 set_func_param,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
764 copy_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
765 free_func_pf
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
766 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
767
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
768 /////////////////// Func_full
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
769
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
770 static void set_func_full(m_option_t* opt, void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
771 m_func_save_t* s;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
772
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
773 if(!src) return;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
774
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
775 for(s = VAL(src) ; s ; s = s->next) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
776 // Revert if needed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
777 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,s->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
778 ((m_opt_func_full_t) opt->p)(opt,s->name,s->param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
779 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
780 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
781
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
782 m_option_type_t m_option_type_func_full = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
783 "Func full",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
784 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
785 sizeof(m_func_save_t*),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
786 M_OPT_TYPE_ALLOW_WILDCARD|M_OPT_TYPE_INDIRECT,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
787 parse_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
788 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
789 NULL, // Nothing to do on save
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
790 set_func_full,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
791 copy_func_pf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
792 free_func_pf
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
793 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
794
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
795 /////////////// Func
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
796
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
797 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
798 #define VAL(x) (*(int*)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
799
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
800 static int parse_func(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
801 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
802 VAL(dst) += 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
803 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
804 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
805
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
806 static void set_func(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
807 int i;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
808 if(opt->priv) ((m_opt_default_func_t)opt->priv)(opt,opt->name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
809 for(i = 0 ; i < VAL(src) ; i++)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
810 ((m_opt_func_t) opt->p)(opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
811 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
812
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
813 m_option_type_t m_option_type_func = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
814 "Func",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
815 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
816 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
817 M_OPT_TYPE_INDIRECT,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
818 parse_func,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
819 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
820 NULL, // Nothing to do on save
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
821 set_func,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
822 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
823 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
824 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
825
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
826 /////////////////// Print
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
827
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
828 static int parse_print(m_option_t* opt,char *name, char *param, void* dst, int src) {
8736
michael
parents: 8384
diff changeset
829 if(opt->type->flags&M_OPT_TYPE_INDIRECT)
michael
parents: 8384
diff changeset
830 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", *(char **) opt->p);
michael
parents: 8384
diff changeset
831 else
michael
parents: 8384
diff changeset
832 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "%s", (char *) opt->p);
michael
parents: 8384
diff changeset
833
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
834 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
835 return M_OPT_EXIT;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
836 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
837 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
838
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
839 m_option_type_t m_option_type_print = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
840 "Print",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
841 "",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
842 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
843 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
844 parse_print,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
845 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
846 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
847 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
848 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
849 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
850 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
851
8736
michael
parents: 8384
diff changeset
852 m_option_type_t m_option_type_print_indirect = {
michael
parents: 8384
diff changeset
853 "Print",
michael
parents: 8384
diff changeset
854 "",
michael
parents: 8384
diff changeset
855 0,
michael
parents: 8384
diff changeset
856 M_OPT_TYPE_INDIRECT,
michael
parents: 8384
diff changeset
857 parse_print,
michael
parents: 8384
diff changeset
858 NULL,
michael
parents: 8384
diff changeset
859 NULL,
michael
parents: 8384
diff changeset
860 NULL,
michael
parents: 8384
diff changeset
861 NULL,
michael
parents: 8384
diff changeset
862 NULL
michael
parents: 8384
diff changeset
863 };
michael
parents: 8384
diff changeset
864
michael
parents: 8384
diff changeset
865
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
866 /////////////////////// Subconfig
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
867 #undef VAL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
868 #define VAL(x) (*(char***)(x))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
869
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
870 static int parse_subconf(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
871 char *subparam;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
872 char *subopt;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
873 int nr = 0,i,r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
874 m_option_t *subopts;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
875 char *token;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
876 char *p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
877 char** lst = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
878
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
879 if (param == NULL || strlen(param) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
880 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
881
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
882 subparam = malloc(strlen(param)+1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
883 subopt = malloc(strlen(param)+1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
884 p = strdup(param); // In case that param is a static string (cf man strtok)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
885
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
886 subopts = opt->p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
887
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
888 token = strtok(p, (char *)&(":"));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
889 while(token)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
890 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
891 int sscanf_ret;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
892 /* clear out */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
893 subopt[0] = subparam[0] = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
894
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
895 sscanf_ret = sscanf(token, "%[^=]=%[^:]", subopt, subparam);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
896
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
897 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "token: '%s', subopt='%s', subparam='%s' (ret: %d)\n", token, subopt, subparam, sscanf_ret);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
898 switch(sscanf_ret)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
899 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
900 case 1:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
901 subparam[0] = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
902 case 2:
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
903 for(i = 0 ; subopts[i].name ; i++) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
904 if(!strcmp(subopts[i].name,subopt)) break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
905 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
906 if(!subopts[i].name) {
10397
6180d7558f75 output typo fixes: unknow --> unknown
diego
parents: 10355
diff changeset
907 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: Unknown suboption %s\n",name,subopt);
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
908 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
909 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
910 r = m_option_parse(&subopts[i],subopt,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
911 subparam[0] == 0 ? NULL : subparam,NULL,src);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
912 if(r < 0) return r;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
913 if(dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
914 lst = (char**)realloc(lst,2 * (nr+2) * sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
915 lst[2*nr] = strdup(subopt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
916 lst[2*nr+1] = subparam[0] == 0 ? NULL : strdup(subparam);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
917 memset(&lst[2*(nr+1)],0,2*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
918 nr++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
919 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
920 break;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
921 default:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
922 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid subconfig argument! ('%s')\n", token);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
923 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
924 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
925 token = strtok(NULL, (char *)&(":"));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
926 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
927
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
928 free(subparam);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
929 free(subopt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
930 free(p);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
931 if(dst)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
932 VAL(dst) = lst;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
933
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
934 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
935 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
936
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
937 m_option_type_t m_option_type_subconfig = {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
938 "Subconfig",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
939 "The syntax is -option opt1=foo:flag:opt2=blah",
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
940 sizeof(int),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
941 M_OPT_TYPE_HAS_CHILD,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
942 parse_subconf,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
943 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
944 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
945 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
946 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
947 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
948 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
949
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
950 #include "libmpcodecs/img_format.h"
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
951
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
952 /* FIXME: snyc with img_format.h */
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
953 static struct {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
954 char* name;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
955 unsigned int fmt;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
956 } mp_imgfmt_list[] = {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
957 {"444p", IMGFMT_444P},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
958 {"422p", IMGFMT_422P},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
959 {"411p", IMGFMT_411P},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
960 {"yuy2", IMGFMT_YUY2},
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
961 {"uyvy", IMGFMT_UYVY},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
962 {"yvu9", IMGFMT_YVU9},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
963 {"if09", IMGFMT_IF09},
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
964 {"yv12", IMGFMT_YV12},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
965 {"i420", IMGFMT_I420},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
966 {"iyuv", IMGFMT_IYUV},
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
967 {"clpl", IMGFMT_CLPL},
11688
c996b8da4ad0 10l. found by John Wehle <john@feith.com>
alex
parents: 11412
diff changeset
968 {"hm12", IMGFMT_HM12},
10746
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
969 {"y800", IMGFMT_Y800},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
970 {"y8", IMGFMT_Y8},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
971 {"nv12", IMGFMT_NV12},
0e5e55232e9d added nv12/nv21 and some other fourccs (still not synced)
alex
parents: 10660
diff changeset
972 {"nv21", IMGFMT_NV21},
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
973 {"bgr24", IMGFMT_BGR24},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
974 {"bgr32", IMGFMT_BGR32},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
975 {"bgr16", IMGFMT_BGR16},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
976 {"bgr15", IMGFMT_BGR15},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
977 {"bgr8", IMGFMT_BGR8},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
978 {"bgr4", IMGFMT_BGR4},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
979 {"bg4b", IMGFMT_BG4B},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
980 {"bgr1", IMGFMT_BGR1},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
981 {"rgb24", IMGFMT_RGB24},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
982 {"rgb32", IMGFMT_RGB32},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
983 {"rgb16", IMGFMT_RGB16},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
984 {"rgb15", IMGFMT_RGB15},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
985 {"rgb8", IMGFMT_RGB8},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
986 {"rgb4", IMGFMT_RGB4},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
987 {"rg4b", IMGFMT_RG4B},
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
988 {"rgb1", IMGFMT_RGB1},
12999
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
989 {"rgba", IMGFMT_RGBA},
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
990 {"argb", IMGFMT_ARGB},
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
991 {"bgra", IMGFMT_BGRA},
bc8cda64ad7f RGBA variants
michael
parents: 12775
diff changeset
992 {"abgr", IMGFMT_ABGR},
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
993 { NULL, 0 }
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
994 };
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
995
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
996 static int parse_imgfmt(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
997 uint32_t fmt = 0;
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
998 int i;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
999
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1000 if (param == NULL || strlen(param) == 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1001 return M_OPT_MISSING_PARAM;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1002
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1003 if(!strcmp(param,"help")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1004 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available formats:");
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1005 for(i = 0 ; mp_imgfmt_list[i].name ; i++)
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1006 mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %s",mp_imgfmt_list[i].name);
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1007 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1008 return M_OPT_EXIT;
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1009 }
10597
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1010
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1011 if (sscanf(param, "0x%x", &fmt) != 1)
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1012 {
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1013 for(i = 0 ; mp_imgfmt_list[i].name ; i++) {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1014 if(!strcasecmp(param,mp_imgfmt_list[i].name)) {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1015 fmt=mp_imgfmt_list[i].fmt;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1016 break;
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1017 }
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1018 }
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1019 if(!mp_imgfmt_list[i].name) {
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1020 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",name,param);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1021 return M_OPT_INVALID;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1022 }
10597
697688503349 CONF_TYPE_IMGFMT now supports 0xffffffff (hexa)-style fourccs too
alex
parents: 10595
diff changeset
1023 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1024
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1025 if(dst)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1026 *((uint32_t*)dst) = fmt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1027
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1028 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1029 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1030
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1031 m_option_type_t m_option_type_imgfmt = {
9600
f55ea7b2fa50 Improve the imgfmt option type
albeu
parents: 9593
diff changeset
1032 "Image format",
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1033 "Please report any missing colorspaces.",
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1034 sizeof(uint32_t),
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1035 0,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1036 parse_imgfmt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1037 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1038 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1039 copy_opt,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1040 NULL,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1041 NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1042 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1043
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1044 //// 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
1045
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1046 #include "m_struct.h"
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1047
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1048 #undef VAL
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1049 #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
1050
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1051 static int find_obj_desc(char* name,m_obj_list_t* l,m_struct_t** ret) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1052 int i;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1053 char* n;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1054
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1055 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
1056 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
1057 if(!strcmp(n,name)) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1058 *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
1059 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1060 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1061 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1062 return 0;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1063 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1064
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1065 static int get_obj_param(char* opt_name,char* obj_name, m_struct_t* desc,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1066 char* str,int* nold,int oldmax,char** dst) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1067 char* eq,param;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1068 m_option_t* opt;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1069 int r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1070
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1071 eq = strchr(str,'=');
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1072 if(eq && eq == str)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1073 eq = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1074
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1075 if(eq) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1076 char* p = eq + 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1077 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
1078 eq[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1079 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
1080 if(!opt) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1081 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
1082 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
1083 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1084 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
1085 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1086 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
1087 eq[0] = '=';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1088 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1089 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1090 if(dst) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1091 dst[0] = strdup(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1092 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
1093 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1094 eq[0] = '=';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1095 } else {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1096 if((*nold) >= oldmax) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1097 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
8f168a4128c5 a 100l and another typo
diego
parents: 10641
diff changeset
1098 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
1099 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
1100 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1101 opt = &desc->fields[(*nold)];
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1102 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
1103 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1104 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
1105 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1106 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1107 if(dst) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1108 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
1109 dst[1] = strdup(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1110 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1111 (*nold)++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1112 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1113 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1114 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1115
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1116 static int get_obj_params(char* opt_name, char* name,char* params,
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1117 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
1118 int n = 0,nold = 0, nopts,r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1119 char* ptr,*last_ptr = params,*eq;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1120 char** ret;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1121
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1122 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
1123 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
1124 if(!desc->fields) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1125 printf("%s doesn't have any options.\n\n",name);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1126 return M_OPT_EXIT;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1127 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1128 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
1129 for(n = 0 ; desc->fields[n].name ; n++) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1130 m_option_t* opt = &desc->fields[n];
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1131 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
1132 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
1133 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
1134 else
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1135 strcpy(min,"No");
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1136 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
1137 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
1138 else
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1139 strcpy(max,"No");
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1140 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
1141 opt->name,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1142 opt->type->name,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1143 min,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1144 max);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1145 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1146 printf("\n");
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1147 return M_OPT_EXIT;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1148 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1149
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1150 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
1151 /* NOP */;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1152
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1153 // 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
1154 r = 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1155 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
1156 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
1157 if(!ptr) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1158 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
1159 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1160 break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1161 }
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1162 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
1163 nold++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1164 last_ptr = ptr+1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1165 continue;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1166 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1167 ptr[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1168 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
1169 ptr[0] = separator;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1170 if(r < 0) break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1171 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1172 last_ptr = ptr+1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1173 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1174 if(r < 0) return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1175 if(!_ret) // Just test
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1176 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1177
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1178 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
1179 n = nold = 0;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1180 last_ptr = params;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1181
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1182 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
1183 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
1184 if(!ptr) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1185 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
1186 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1187 break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1188 }
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1189 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
1190 last_ptr = ptr+1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1191 nold++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1192 continue;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1193 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1194 ptr[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1195 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
1196 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1197 last_ptr = ptr+1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1198 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1199 ret[n*2] = ret[n*2+1] = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1200 *_ret = ret;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1201
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1202 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1203 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1204
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1205 static int parse_obj_params(m_option_t* opt,char *name,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1206 char *param, void* dst, int src) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1207 char** opts;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1208 int r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1209 m_obj_params_t* p = opt->priv;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1210 m_struct_t* desc = p->desc;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1211 char* cpy = strdup(param);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1212
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1213 // 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
1214 if(!p)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1215 return M_OPT_INVALID;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1216
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1217 r = get_obj_params(name,desc->name,cpy,desc,p->separator,&opts);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1218 free(cpy);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1219 if(r < 0)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1220 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1221 if(!dst)
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1222 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1223
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1224 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
1225 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
1226
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1227 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1228 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1229
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1230
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1231 m_option_type_t m_option_type_obj_params = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1232 "Object params",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1233 "",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1234 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1235 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1236 parse_obj_params,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1237 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1238 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1239 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1240 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1241 NULL
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1242 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1243
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1244 /// 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
1245
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1246 /// Span arguments
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1247 static m_span_t m_span_params_dflts = { -1, -1 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1248 static m_option_t m_span_params_fields[] = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1249 {"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
1250 {"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
1251 { 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
1252 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1253 static struct m_struct_st m_span_opts = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1254 "m_span",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1255 sizeof(m_span_t),
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1256 &m_span_params_dflts,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1257 m_span_params_fields
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1258 };
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1259 m_obj_params_t m_span_params_def = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1260 &m_span_opts,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1261 '-'
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1262 };
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1263
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1264 static int parse_obj_settings(char* opt,char* str,m_obj_list_t* list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1265 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
1266 int r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1267 char *param,**plist = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1268 m_struct_t* desc;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1269 m_obj_settings_t *ret = _ret ? *_ret : NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1270
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1271
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1272 // 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
1273 param = strchr(str,'=');
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1274 if(param) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1275 param[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1276 param++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1277 if(strlen(param) <= 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1278 param = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1279 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1280
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1281
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1282 if(!find_obj_desc(str,list,&desc)) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1283 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
1284 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1285 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1286
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1287 if(param) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1288 if(!desc && _ret) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1289 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
1290 plist[0] = strdup("_oldargs_");
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1291 plist[1] = strdup(param);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1292 } else if(desc) {
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1293 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
1294 if(r < 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1295 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1296 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1297 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1298 if(!_ret)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1299 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1300
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1301 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
1302 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
1303 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
1304 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
1305
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1306 *_ret = ret;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1307 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1308 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1309
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1310 static void free_obj_settings_list(void* dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1311
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1312 static int obj_settings_list_del(char *opt_name,char *param,void* dst, int src) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1313 char** str_list = NULL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1314 int r,i,idx_max = 0;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1315 char* rem_id = "_removed_marker_";
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1316 m_option_t list_opt = {opt_name , NULL, CONF_TYPE_STRING_LIST,
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1317 0, 0, 0, NULL };
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1318 m_obj_settings_t* obj_list = dst ? VAL(dst) : NULL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1319
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1320 if(dst && !obj_list) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1321 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: the list is empty.\n",opt_name);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1322 return 1;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1323 } else if(obj_list) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1324 for(idx_max = 0 ; obj_list[idx_max].name != NULL ; idx_max++)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1325 /* NOP */;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1326 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1327
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1328 r = m_option_parse(&list_opt,opt_name,param,&str_list,src);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1329 if(r < 0 || !str_list)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1330 return r;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1331
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1332 for(r = 0 ; str_list[r] ; r++) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1333 int id;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1334 char* endptr;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1335 id = strtol(str_list[r],&endptr,0);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1336 if(endptr == str_list[r]) {
10660
8f168a4128c5 a 100l and another typo
diego
parents: 10641
diff changeset
1337 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
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1338 m_option_free(&list_opt,&str_list);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1339 return M_OPT_INVALID;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1340 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1341 if(!obj_list) continue;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1342 if(id >= idx_max || id < -idx_max) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1343 mp_msg(MSGT_CFGPARSER, MSGL_WARN, "Option %s: Index %d is out of range.\n",opt_name,id);
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1344 continue;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1345 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1346 if(id < 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1347 id = idx_max + id;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1348 free(obj_list[id].name);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1349 free_str_list(&(obj_list[id].attribs));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1350 obj_list[id].name = rem_id;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1351 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1352
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1353 if(!dst) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1354 m_option_free(&list_opt,&str_list);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1355 return 1;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1356 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1357
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1358 for(i = 0 ; obj_list[i].name ; i++) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1359 while(obj_list[i].name == rem_id) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1360 memmove(&obj_list[i],&obj_list[i+1],sizeof(m_obj_settings_t)*(idx_max - i));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1361 idx_max--;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1362 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1363 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1364 obj_list = realloc(obj_list,sizeof(m_obj_settings_t)*(idx_max+1));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1365 VAL(dst) = obj_list;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1366
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1367 return 1;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1368 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1369
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1370 static int parse_obj_settings_list(m_option_t* opt,char *name,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1371 char *param, void* dst, int src) {
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1372 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
1373 char *str;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1374 char *ptr, *last_ptr;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1375 m_obj_settings_t *res = NULL,*queue = NULL,*head = NULL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1376 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
1377
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1378 // 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
1379 if(!opt->priv)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1380 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1381
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1382 if(opt->name[len-1] == '*' && ((int)strlen(name) > len - 1)) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1383 char* n = &name[len-1];
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1384 if(strcasecmp(n,"-add") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1385 op = OP_ADD;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1386 else if(strcasecmp(n,"-pre") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1387 op = OP_PRE;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1388 else if(strcasecmp(n,"-del") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1389 op = OP_DEL;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1390 else if(strcasecmp(n,"-clr") == 0)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1391 op = OP_CLR;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1392 else {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1393 char prefix[len];
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1394 strncpy(prefix,opt->name,len-1);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1395 prefix[len-1] = '\0';
10608
2cae82f2ab02 Spelling police:
diego
parents: 10597
diff changeset
1396 mp_msg(MSGT_VFILTER,MSGL_ERR, "Option %s: unknown postfix %s\n"
2cae82f2ab02 Spelling police:
diego
parents: 10597
diff changeset
1397 "Supported postfixes are:\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1398 " %s-add\n"
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1399 " Append the given list to the current list\n\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1400 " %s-pre\n"
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1401 " Prepend the given list to the current list\n\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1402 " %s-del x,y,...\n"
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1403 " Remove the given elements. Take the list element index (starting from 0).\n"
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1404 " Negative index can be used (i.e. -1 is the last element)\n\n"
12653
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1405 " %s-clr\n"
b40f21d9a43c degccify
alex
parents: 11950
diff changeset
1406 " Clear the current list.\n",name,n,prefix,prefix,prefix,prefix);
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1407
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
1408 return M_OPT_UNKNOWN;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1409 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1410 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1411
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1412 // Clear the list ??
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1413 if(op == OP_CLR) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1414 if(dst)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1415 free_obj_settings_list(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1416 return 0;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1417 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1418
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1419 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
1420 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
1421
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1422 switch(op) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1423 case OP_ADD:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1424 if(dst) head = VAL(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1425 break;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1426 case OP_PRE:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1427 if(dst) queue = VAL(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1428 break;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1429 case OP_DEL:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1430 return obj_settings_list_del(name,param,dst,src);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1431 case OP_NONE:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1432 if(dst && VAL(dst))
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1433 free_obj_settings_list(dst);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1434 break;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1435 default:
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1436 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
1437 return M_OPT_UNKNOWN;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1438 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1439
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1440 if(!strcmp(param,"help")) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1441 m_obj_list_t* ol = opt->priv;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1442 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
1443 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
1444 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
1445 M_ST_MB(char*,ol->list[n],ol->info_off));
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1446 return M_OPT_EXIT;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1447 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1448 ptr = str = strdup(param);
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 while(ptr[0] != '\0') {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1451 last_ptr = ptr;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1452 ptr = strchr(ptr,LIST_SEPARATOR);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1453 if(!ptr) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1454 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
1455 if(r < 0) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1456 free(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1457 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1458 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1459 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1460 break;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1461 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1462 ptr[0] = '\0';
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1463 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
1464 if(r < 0) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1465 free(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1466 return r;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1467 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1468 ptr++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1469 n++;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1470 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1471 free(str);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1472 if(n == 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1473 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1474
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1475 if( ((opt->flags & M_OPT_MIN) && (n < opt->min)) ||
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1476 ((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
1477 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
1478
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1479 if(dst) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1480 if(queue) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1481 int qsize;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1482 for(qsize = 0 ; queue[qsize].name ; qsize++)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1483 /* NOP */;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1484 res = realloc(res,(qsize+n+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1485 memcpy(&res[n],queue,(qsize+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1486 n += qsize;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1487 free(queue);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1488 }
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1489 if(head) {
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1490 int hsize;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1491 for(hsize = 0 ; head[hsize].name ; hsize++)
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1492 /* NOP */;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1493 head = realloc(head,(hsize+n+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1494 memcpy(&head[hsize],res,(n+1)*sizeof(m_obj_settings_t));
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1495 free(res);
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1496 res = head;
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1497 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1498 VAL(dst) = res;
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1499 }
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1500 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1501 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1502
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1503 static void free_obj_settings_list(void* dst) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1504 int n;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1505 m_obj_settings_t *d;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1506
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1507 if(!dst || !VAL(dst)) return;
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 d = VAL(dst);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1510 #ifndef NO_FREE
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1511 for(n = 0 ; d[n].name ; n++) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1512 free(d[n].name);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1513 free_str_list(&(d[n].attribs));
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1514 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1515 free(d);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1516 #endif
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1517 VAL(dst) = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1518 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1519
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1520 static void copy_obj_settings_list(m_option_t* opt,void* dst, void* src) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1521 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
1522 int n;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1523
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1524 if(!(dst && src))
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1525 return;
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 s = VAL(src);
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1528
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1529 if(VAL(dst))
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1530 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
1531 if(!s) return;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1532
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
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1535 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
1536 /* NOP */;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1537 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
1538 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
1539 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
1540 d[n].attribs = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1541 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
1542 }
10236
4640f25fef12 warning fixes by Dominik
alex
parents: 9913
diff changeset
1543 d[n].name = NULL;
4640f25fef12 warning fixes by Dominik
alex
parents: 9913
diff changeset
1544 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
1545 VAL(dst) = d;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1546 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1547
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1548 m_option_type_t m_option_type_obj_settings_list = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1549 "Object settings list",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1550 "",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1551 sizeof(m_obj_settings_t*),
9913
88fe89b46786 Add suffix support to the object list type.
albeu
parents: 9848
diff changeset
1552 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
1553 parse_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1554 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1555 copy_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1556 copy_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1557 copy_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1558 free_obj_settings_list,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1559 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1560
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1561
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1562
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1563 static int parse_obj_presets(m_option_t* opt,char *name,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1564 char *param, void* dst, int src) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1565 m_obj_presets_t* obj_p = (m_obj_presets_t*)opt->priv;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1566 m_struct_t *in_desc,*out_desc;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1567 int s,i;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1568 unsigned char* pre = obj_p->presets;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1569 char* pre_name = NULL;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1570
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1571 if(!obj_p) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1572 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
1573 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
1574 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1575
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1576 if(!param)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1577 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
1578
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1579 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
1580 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
1581 s = in_desc->size;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1582
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1583 if(!strcmp(param,"help")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1584 mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available presets for %s->%s:",out_desc->name,name);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1585 for(pre = obj_p->presets;(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
1586 pre += s)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1587 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
1588 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "\n");
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1589 return M_OPT_EXIT;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1590 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1591
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1592 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
1593 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
1594 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
1595 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1596 if(!pre_name) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1597 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: There is no preset named %s\n"
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1598 "Available presets are:",name,param);
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1599 for(pre = obj_p->presets;(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
1600 pre += s)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1601 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
1602 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
1603 return M_OPT_INVALID;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1604 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1605
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1606 if(!dst) return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1607
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1608 for(i = 0 ; in_desc->fields[i].name ; i++) {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1609 m_option_t* out_opt = m_option_list_find(out_desc->fields,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1610 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
1611 if(!out_opt) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1612 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
1613 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
1614 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1615 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
1616 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1617 return 1;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1618 }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1619
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1620
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1621 m_option_type_t m_option_type_obj_presets = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1622 "Object presets",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1623 "",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1624 0,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1625 0,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1626 parse_obj_presets,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1627 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1628 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1629 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1630 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1631 NULL
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1632 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9177
diff changeset
1633
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1634 static int parse_custom_url(m_option_t* opt,char *name,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1635 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
1636 int pos1, pos2, r, v6addr = 0;
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1637 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
1638 m_struct_t* desc = opt->priv;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1639
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1640 if(!desc) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1641 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
1642 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
1643 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1644
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1645 // extract the protocol
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1646 ptr1 = strstr(url, "://");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1647 if( ptr1==NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1648 // Filename only
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1649 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
1650 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
1651 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1652 }
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1653 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
1654 return M_OPT_INVALID;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1655 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1656 pos1 = ptr1-url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1657 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
1658 ptr1[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1659 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
1660 ptr1[0] = ':';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1661 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1662 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
1663 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1664 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1665 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1666
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1667 // jump the "://"
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1668 ptr1 += 3;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1669 pos1 += 3;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1670
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1671 // 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
1672 ptr2 = strstr(ptr1, "@");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1673 ptr3 = strstr(ptr1, "/");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1674 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
1675 // 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
1676 ptr2 = NULL;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1677 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1678 if( ptr2!=NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1679
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1680 // 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
1681 int len = ptr2-ptr1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1682 if(!m_option_list_find(desc->fields,"username")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1683 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
1684 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1685 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1686 ptr3 = strstr(ptr1, ":");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1687 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
1688 // 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
1689 int len2 = ptr2-ptr3-1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1690 if(!m_option_list_find(desc->fields,"password")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1691 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
1692 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1693 } else { // Username and password
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1694 if(dst) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1695 ptr3[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1696 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
1697 ptr3[0] = ':';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1698 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1699 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
1700 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1701 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1702 ptr2[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1703 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
1704 ptr2[0] = '@';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1705 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1706 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
1707 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1708 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1709 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1710 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1711 } else { // User name only
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1712 ptr2[0] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1713 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
1714 ptr2[0] = '@';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1715 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1716 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
1717 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1718 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1719 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1720 }
10592
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1721 ptr1 = ptr2+1;
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1722 pos1 = ptr1-url;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1723 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1724
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1725 // before looking for a port number check if we have an IPv6 type numeric address
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1726 // 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
1727 ptr2 = strstr(ptr1, "[");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1728 ptr3 = strstr(ptr1, "]");
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1729 // 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
1730 ptr4 = strstr(ptr1, "/");
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1731 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
1732 // 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
1733 ptr1++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1734 pos1++;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1735 ptr2 = ptr3;
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1736 v6addr = 1;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1737 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1738 ptr2 = ptr1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1739 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1740
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1741 // 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
1742 ptr2 = strstr(ptr2, ":");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1743 // 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
1744 ptr3 = strstr(ptr1, "/");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1745 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
1746 if( ptr2==NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1747 // No port is given
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1748 // 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
1749 if( ptr3==NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1750 // No path/filename
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1751 // 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
1752 pos2 = strlen(url);
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1753 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1754 // 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
1755 pos2 = ptr3-url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1756 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1757 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1758 // 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
1759 // Get the port number
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1760 if(!m_option_list_find(desc->fields,"port")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1761 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
1762 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1763 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1764 if(dst) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1765 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
1766 char tmp[100];
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1767 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
1768 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
1769 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1770 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
1771 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1772 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1773 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1774 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1775 pos2 = ptr2-url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1776 }
11771
827cae571c5c Fix long standing bug where last (and sometimes first) char of the
albeu
parents: 11688
diff changeset
1777 if( v6addr ) pos2--;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1778 // Get the hostname
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1779 if(pos2-pos1 > 0) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1780 if(!m_option_list_find(desc->fields,"hostname")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1781 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
1782 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1783 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1784 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
1785 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
1786 tmp[pos2-pos1] = '\0';
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1787 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
1788 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1789 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
1790 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1791 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1792 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1793 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1794 // 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
1795 ptr2 = strstr(ptr1, "/");
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1796 if( ptr2!=NULL ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1797 // 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
1798 // 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
1799 if( strlen(ptr2)>1 ) {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1800 // 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
1801 if(!m_option_list_find(desc->fields,"filename")) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1802 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
1803 // skip
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1804 } else {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1805 if(dst) {
10592
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1806 int l = strlen(ptr2+1) + 1;
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1807 char* fname = ptr2+1;
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1808 if(l > 1) {
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1809 fname = malloc(l);
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1810 url_unescape_string(fname,ptr2+1);
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1811 }
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1812 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
1813 if(fname != ptr2+1)
98c885b1ff06 Fix a 10l and add escaped filename support. Needed by ftp.
albeu
parents: 10397
diff changeset
1814 free(fname);
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1815 if(r < 0) {
10641
649669755efa spelling and grammar fixes galore
diego
parents: 10608
diff changeset
1816 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
1817 return r;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1818 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1819 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1820 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1821 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1822 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1823 return 1;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1824 }
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1825
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1826 /// TODO : Write the other needed funcs for 'normal' options
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1827 m_option_type_t m_option_type_custom_url = {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1828 "Custom URL",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1829 "",
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1830 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1831 0,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1832 parse_custom_url,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1833 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1834 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1835 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1836 NULL,
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1837 NULL
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9600
diff changeset
1838 };