Mercurial > mplayer.hg
annotate parser-mecmd.c @ 36443:0d52d44ad7b6
Revert r36537.
This was based on a wrong assumption.
With the sample at hand, the error is actually reproducible
with the MESA implementation (in fact, that one just crashes
instead, so the workaround did no work for it).
author | reimar |
---|---|
date | Sun, 08 Dec 2013 17:53:59 +0000 |
parents | c1a3f1bbba26 |
children |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
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:
29263
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:
29263
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:
29263
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
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:
29263
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:
29263
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:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
29263
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:
29263
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:
29263
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:
29263
diff
changeset
|
17 */ |
18265 | 18 |
19 /// \file | |
20 /// \ingroup ConfigParsers MEntry | |
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 "parser-mecmd.h" | |
38 | |
39 void | |
40 m_entry_list_free(m_entry_t* lst) { | |
41 int i,j; | |
42 | |
43 for(i = 0 ; lst[i].name != NULL ; i++){ | |
44 free(lst[i].name); | |
45 for(j = 0 ; lst[i].opts[2*j] != NULL ; j++) { | |
46 free(lst[i].opts[2*j]); | |
47 free(lst[i].opts[2*j+1]); | |
48 } | |
49 free(lst[i].opts); | |
50 } | |
51 free(lst); | |
52 } | |
53 | |
54 int | |
55 m_entry_set_options(m_config_t *config, m_entry_t* entry) { | |
56 int i,r; | |
57 | |
58 for(i = 0 ; entry->opts[2*i] != NULL ; i++){ | |
59 r = m_config_set_option(config,entry->opts[2*i],entry->opts[2*i+1]); | |
60 if(r < 0) | |
61 return 0; | |
62 } | |
63 return 1; | |
64 } | |
65 | |
66 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
25227
diff
changeset
|
67 |
8164 | 68 |
69 m_entry_t* | |
70 m_config_parse_me_command_line(m_config_t *config, int argc, char **argv) | |
71 { | |
72 int i,nf = 0,no = 0; | |
73 int tmp; | |
74 char *opt; | |
75 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
|
76 int opt_exit = 0; |
8164 | 77 m_entry_t *lst = NULL, *entry = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
25227
diff
changeset
|
78 |
8164 | 79 #ifdef MP_DEBUG |
80 assert(config != NULL); | |
81 assert(argv != NULL); | |
82 assert(argc >= 1); | |
83 #endif | |
84 | |
85 config->mode = M_COMMAND_LINE; | |
86 | |
87 lst = calloc(1,sizeof(m_entry_t)); | |
88 | |
89 for (i = 1; i < argc; i++) { | |
90 //next: | |
91 opt = argv[i]; | |
92 /* 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
|
93 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) == 0)) |
8164 | 94 { |
95 no_more_opts = 1; | |
96 if (i+1 >= argc) | |
97 { | |
21312 | 98 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_NoFileGivenOnCommandLine); |
8164 | 99 goto err_out; |
100 } | |
101 continue; | |
102 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
25227
diff
changeset
|
103 |
8164 | 104 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */ |
105 { | |
25227 | 106 const m_option_t* mp_opt = NULL; |
8164 | 107 /* remove trailing '-' */ |
108 opt++; | |
109 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "this_opt = option: %s\n", opt); | |
110 mp_opt = m_config_get_option(config,opt); | |
111 if(!mp_opt) { | |
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
|
112 tmp = M_OPT_UNKNOWN; |
21312 | 113 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_NotAnMEncoderOption, opt); |
8164 | 114 goto err_out; |
115 } | |
8893 | 116 if(!entry || (mp_opt->flags & M_OPT_GLOBAL)){ |
8164 | 117 tmp = m_config_set_option(config, opt, argv[i + 1]); |
17467
d631b3c09c53
Fix multiple help clauses on the command line with mencoder.
albeu
parents:
16345
diff
changeset
|
118 if (tmp <= M_OPT_EXIT) { |
d631b3c09c53
Fix multiple help clauses on the command line with mencoder.
albeu
parents:
16345
diff
changeset
|
119 opt_exit = 1; |
d631b3c09c53
Fix multiple help clauses on the command line with mencoder.
albeu
parents:
16345
diff
changeset
|
120 tmp = M_OPT_EXIT - tmp; |
d631b3c09c53
Fix multiple help clauses on the command line with mencoder.
albeu
parents:
16345
diff
changeset
|
121 } |
18148
280f93388ac3
also print an error when parsing fails with M_OPT_INVALID or M_OPT_PARSER_ERR.
reimar
parents:
17467
diff
changeset
|
122 else |
8893 | 123 if(tmp < 0){ |
124 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp); | |
21312 | 125 mp_msg(MSGT_CFGPARSER, MSGL_FATAL, MSGTR_ErrorParsingOptionOnCommandLine, opt); |
8893 | 126 goto err_out; |
127 } | |
128 } else { | |
8164 | 129 tmp = m_config_check_option(config, opt, argv[i + 1]); |
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
|
130 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
|
131 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
|
132 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
|
133 } |
8164 | 134 if(tmp >= 0) { |
135 entry->opts = realloc(entry->opts,(no+2)*2*sizeof(char*)); | |
136 entry->opts[2*no] = strdup(opt); | |
137 entry->opts[2*no+1] = argv[i + 1] ? strdup(argv[i + 1]) : NULL; | |
138 entry->opts[2*no+2] = entry->opts[2*no+3] = NULL; | |
139 no++; | |
8893 | 140 } else { |
141 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp); | |
142 goto err_out; | |
8164 | 143 } |
144 } | |
145 i += tmp; | |
9747
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
146 } else {/* filename */ |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
147 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Adding file %s\n",argv[i]); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
148 lst = realloc(lst,(nf+2)*sizeof(m_entry_t)); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
149 lst[nf].name = strdup(argv[i]); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
150 lst[nf].opts = calloc(2,sizeof(char*)); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
151 entry = &lst[nf]; |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
152 no = 0; |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
153 memset(&lst[nf+1],0,sizeof(m_entry_t)); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
154 nf++; |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
155 } |
8164 | 156 } |
157 | |
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
|
158 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
|
159 exit(0); |
8164 | 160 if(nf == 0) { |
161 m_entry_list_free(lst); | |
21312 | 162 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_NoFileGiven); |
8164 | 163 return NULL; |
164 } | |
165 return lst; | |
166 | |
167 err_out: | |
168 m_entry_list_free(lst); | |
169 return NULL; | |
170 } |