Mercurial > mplayer.hg
annotate parser-mpcmd.c @ 35165:b924f0df5a1d
Remove our internal mp3lib copy.
We have FFmpeg as integrated decoder, and the
external mpg123 library should include all important
improvements from our mp3lib and is actually properly
maintained.
author | reimar |
---|---|
date | Sun, 21 Oct 2012 12:10:38 +0000 |
parents | 131d0e04a50b |
children | 389d43c448b3 |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29850
diff
changeset
|
17 */ |
18265 | 18 |
19 /// \file | |
20 /// \ingroup ConfigParsers Playtree | |
21 | |
8164 | 22 #include "config.h" |
23 | |
24 #include <stdio.h> | |
25 #include <stdlib.h> | |
26 #include <string.h> | |
27 #include <errno.h> | |
28 | |
29 #ifdef MP_DEBUG | |
30 #include <assert.h> | |
31 #endif | |
32 | |
33 #include "mp_msg.h" | |
21312 | 34 #include "help_mp.h" |
8164 | 35 #include "m_option.h" |
36 #include "m_config.h" | |
37 #include "playtree.h" | |
26263 | 38 #include "parser-mpcmd.h" |
30675
059153d06619
Add header for macosx_finder_args() instead of forward declaring it.
diego
parents:
30429
diff
changeset
|
39 #include "osdep/macosx_finder_args.h" |
8164 | 40 |
41 static int mode = 0; | |
42 | |
43 #define GLOBAL 0 | |
44 #define LOCAL 1 | |
45 #define DROP_LOCAL 2 | |
46 | |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
47 #define dvd_range(a) (a>0 && a<256) |
8164 | 48 #define UNSET_GLOBAL (mode = LOCAL) |
49 // Use this 1 if you want to have only global option (no per file option) | |
50 // #define UNSET_GLOBAL (mode = GLOBAL) | |
51 | |
52 | |
53 static int is_entry_option(char *opt, char *param, play_tree_t** ret) { | |
54 play_tree_t* entry = NULL; | |
55 | |
56 *ret = NULL; | |
57 | |
58 if(strcasecmp(opt,"playlist") == 0) { // We handle playlist here | |
59 if(!param) | |
60 return M_OPT_MISSING_PARAM; | |
12267 | 61 |
8164 | 62 entry = parse_playlist_file(param); |
63 if(!entry) | |
12267 | 64 return -1; |
65 else { | |
66 *ret=entry; | |
67 return 1; | |
68 } | |
8164 | 69 } |
70 return 0; | |
71 } | |
72 | |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
73 static inline void add_entry(play_tree_t **last_parentp, |
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
74 play_tree_t **last_entryp, play_tree_t *entry) { |
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
75 if(*last_entryp == NULL) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
76 play_tree_set_child(*last_parentp,entry); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
77 else |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
78 play_tree_append_entry(*last_entryp,entry); |
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
79 *last_entryp = entry; |
10513 | 80 } |
81 | |
18265 | 82 /// Setup the \ref Config from command line arguments and build a playtree. |
83 /** \ingroup ConfigParsers | |
84 */ | |
8164 | 85 play_tree_t* |
86 m_config_parse_mp_command_line(m_config_t *config, int argc, char **argv) | |
87 { | |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
88 int i,j,start_title=-1,end_title=-1; |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
89 char *opt,*splitpos=NULL; |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
90 char entbuf[15]; |
8164 | 91 int no_more_opts = 0; |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
92 int opt_exit = 0; // flag indicating whether mplayer should exit without playing anything |
8164 | 93 play_tree_t *last_parent, *last_entry = NULL, *root; |
94 | |
95 #ifdef MP_DEBUG | |
96 assert(config != NULL); | |
97 assert(argv != NULL); | |
98 assert(argc >= 1); | |
99 #endif | |
100 | |
101 config->mode = M_COMMAND_LINE; | |
102 mode = GLOBAL; | |
27397
d47744b95b78
Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents:
27394
diff
changeset
|
103 #ifdef CONFIG_MACOSX_FINDER |
13909
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
104 root=macosx_finder_args(config, argc, argv); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
105 if(root) |
13909
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
106 return root; |
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
107 #endif |
07dadc3066f3
add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents:
12816
diff
changeset
|
108 |
8164 | 109 last_parent = root = play_tree_new(); |
110 | |
111 for (i = 1; i < argc; i++) { | |
112 //next: | |
113 opt = argv[i]; | |
114 /* check for -- (no more options id.) except --help! */ | |
15245
4fdfe0860cc5
Make "mplayer -- --a" play the file --a instead of bailing out with a useless
reimar
parents:
14541
diff
changeset
|
115 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) == 0)) |
8164 | 116 { |
117 no_more_opts = 1; | |
118 if (i+1 >= argc) | |
119 { | |
21312 | 120 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_NoFileGivenOnCommandLine); |
8164 | 121 goto err_out; |
122 } | |
123 continue; | |
124 } | |
125 if((opt[0] == '{') && (opt[1] == '\0')) | |
126 { | |
127 play_tree_t* entry = play_tree_new(); | |
128 UNSET_GLOBAL; | |
8175 | 129 if(last_parent->flags & PLAY_TREE_RND) |
130 entry->flags |= PLAY_TREE_RND; | |
8164 | 131 if(last_entry == NULL) { |
132 play_tree_set_child(last_parent,entry); | |
133 } else { | |
134 play_tree_append_entry(last_entry,entry); | |
135 last_entry = NULL; | |
136 } | |
137 last_parent = entry; | |
138 continue; | |
139 } | |
140 | |
141 if((opt[0] == '}') && (opt[1] == '\0')) | |
142 { | |
143 if( ! last_parent || ! last_parent->parent) { | |
144 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "too much }-\n"); | |
145 goto err_out; | |
146 } | |
147 last_entry = last_parent; | |
148 last_parent = last_entry->parent; | |
149 continue; | |
150 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
151 |
8164 | 152 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */ |
153 { | |
13932
f845791e2823
fix: when doing -loop 0 -shuffle, the arg after shuffle was skipped
reimar
parents:
13909
diff
changeset
|
154 int tmp = 0; |
8164 | 155 /* remove trailing '-' */ |
156 opt++; | |
157 | |
158 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "this_opt = option: %s\n", opt); | |
159 // We handle here some specific option | |
17472
526abfe30498
Make -list-options work in both MPlayer and MEncoder.
albeu
parents:
16345
diff
changeset
|
160 // Loop option when it apply to a group |
526abfe30498
Make -list-options work in both MPlayer and MEncoder.
albeu
parents:
16345
diff
changeset
|
161 if(strcasecmp(opt,"loop") == 0 && |
8164 | 162 (! last_entry || last_entry->child) ) { |
163 int l; | |
18097
df9633d451dc
avoid crash when running "mplayer -loop" (dereferencing uninitialize pointer).
reimar
parents:
17472
diff
changeset
|
164 char* end = NULL; |
8400 | 165 l = (i+1<argc) ? strtol(argv[i+1],&end,0) : 0; |
18097
df9633d451dc
avoid crash when running "mplayer -loop" (dereferencing uninitialize pointer).
reimar
parents:
17472
diff
changeset
|
166 if(!end || *end != '\0') { |
21312 | 167 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_TheLoopOptionMustBeAnInteger, argv[i+1]); |
8164 | 168 tmp = ERR_OUT_OF_RANGE; |
9106 | 169 } else { |
8164 | 170 play_tree_t* pt = last_entry ? last_entry : last_parent; |
171 l = l <= 0 ? -1 : l; | |
172 pt->loop = l; | |
173 tmp = 1; | |
174 } | |
8452 | 175 } else if(strcasecmp(opt,"shuffle") == 0) { |
8175 | 176 if(last_entry && last_entry->child) |
177 last_entry->flags |= PLAY_TREE_RND; | |
178 else | |
179 last_parent->flags |= PLAY_TREE_RND; | |
8452 | 180 } else if(strcasecmp(opt,"noshuffle") == 0) { |
8175 | 181 if(last_entry && last_entry->child) |
182 last_entry->flags &= ~PLAY_TREE_RND; | |
183 else | |
184 last_parent->flags &= ~PLAY_TREE_RND; | |
8164 | 185 } else { |
25227 | 186 const m_option_t* mp_opt = NULL; |
8164 | 187 play_tree_t* entry = NULL; |
188 | |
8458 | 189 tmp = is_entry_option(opt,(i+1<argc) ? argv[i + 1] : NULL,&entry); |
8164 | 190 if(tmp > 0) { // It's an entry |
191 if(entry) { | |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
192 add_entry(&last_parent,&last_entry,entry); |
8175 | 193 if((last_parent->flags & PLAY_TREE_RND) && entry->child) |
194 entry->flags |= PLAY_TREE_RND; | |
8164 | 195 UNSET_GLOBAL; |
196 } else if(mode == LOCAL) // Entry is empty we have to drop his params | |
197 mode = DROP_LOCAL; | |
198 } else if(tmp == 0) { // 'normal' options | |
199 mp_opt = m_config_get_option(config,opt); | |
200 if (mp_opt != NULL) { // Option exist | |
201 if(mode == GLOBAL || (mp_opt->flags & M_OPT_GLOBAL)) | |
8426 | 202 tmp = (i+1<argc) ? m_config_set_option(config, opt, argv[i + 1]) |
203 : m_config_set_option(config, opt, NULL); | |
8164 | 204 else { |
8458 | 205 tmp = m_config_check_option(config, opt, (i+1<argc) ? argv[i + 1] : NULL); |
8164 | 206 if(tmp >= 0 && mode != DROP_LOCAL) { |
207 play_tree_t* pt = last_entry ? last_entry : last_parent; | |
208 play_tree_set_param(pt,opt, argv[i + 1]); | |
209 } | |
210 } | |
211 } 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
|
212 tmp = M_OPT_UNKNOWN; |
21312 | 213 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_UnknownOptionOnCommandLine, opt); |
8164 | 214 } |
215 } | |
216 } | |
217 | |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
218 if (tmp <= M_OPT_EXIT) { |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
219 opt_exit = 1; |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
220 tmp = M_OPT_EXIT - tmp; |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
221 } else |
9792 | 222 if (tmp < 0) { |
21312 | 223 mp_msg(MSGT_CFGPARSER, MSGL_FATAL, MSGTR_ErrorParsingOptionOnCommandLine, opt); |
8164 | 224 goto err_out; |
9792 | 225 } |
8164 | 226 i += tmp; |
227 } | |
228 else /* filename */ | |
229 { | |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
230 int is_dvdnav = strstr(argv[i],"dvdnav://") != NULL; |
8164 | 231 play_tree_t* entry = play_tree_new(); |
232 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Adding file %s\n",argv[i]); | |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
233 // if required expand DVD filename entries like dvd://1-3 into component titles |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
234 if ( strstr(argv[i],"dvd://") != NULL || is_dvdnav) |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
235 { |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
236 int offset = is_dvdnav ? 9 : 6; |
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
237 splitpos=strstr(argv[i]+offset,"-"); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
238 if(splitpos != NULL) |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
239 { |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
240 start_title=strtol(argv[i]+offset,NULL,10); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
241 if (start_title<0) { //entries like dvd://-2 start title implied 1 |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
242 end_title=abs(start_title); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
243 start_title=1; |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
244 } else { |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
245 end_title=strtol(splitpos+1,NULL,10); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
246 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
247 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
248 if (dvd_range(start_title) && dvd_range(end_title) && (start_title<end_title)) |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
249 { |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
250 for (j=start_title;j<=end_title;j++) |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
251 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
252 if (j!=start_title) |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
253 entry=play_tree_new(); |
29850
93947ce0e2cb
Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents:
29263
diff
changeset
|
254 snprintf(entbuf,sizeof(entbuf),is_dvdnav ? "dvdnav://%d" : "dvd://%d",j); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
255 play_tree_add_file(entry,entbuf); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
256 add_entry(&last_parent,&last_entry,entry); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
257 last_entry = entry; |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
258 } |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
259 } else { |
21312 | 260 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_InvalidPlayEntry, argv[i]); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
261 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
262 |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
263 } else { // dvd:// or dvd://x entry |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
264 play_tree_add_file(entry,argv[i]); |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
265 } |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
266 } else { |
8164 | 267 play_tree_add_file(entry,argv[i]); |
12543
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
268 } |
2cbc9f1f728f
Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents:
12267
diff
changeset
|
269 |
8164 | 270 // Lock stdin if it will be used as input |
271 if(strcasecmp(argv[i],"-") == 0) | |
12816 | 272 m_config_set_option(config,"noconsolecontrols",NULL); |
10542
928c02fa9949
fix the bug where only the last file of the command line is found
pl
parents:
10513
diff
changeset
|
273 add_entry(&last_parent,&last_entry,entry); |
8164 | 274 UNSET_GLOBAL; // We start entry specific options |
275 | |
276 } | |
277 } | |
278 | |
16345
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
279 if (opt_exit) |
feb16d0117c8
allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents:
15742
diff
changeset
|
280 goto err_out; |
8164 | 281 if(last_parent != root) |
282 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Missing }- ?\n"); | |
283 return root; | |
284 | |
285 err_out: | |
286 play_tree_free(root,1); | |
287 return NULL; | |
288 } |