@@ -156,55 +156,7 @@ bool cmdlinet::parse(int argc, const char **argv, const char *optstring)
156156 clear ();
157157
158158 parse_optstring (optstring);
159-
160- for (int i=1 ; i<argc; i++)
161- {
162- if (argv[i][0 ]!=' -' )
163- args.push_back (argv[i]);
164- else
165- {
166- optionalt<std::size_t > optnr;
167-
168- if (argv[i][1 ]!=0 && argv[i][2 ]==0 )
169- optnr=getoptnr (argv[i][1 ]); // single-letter option -X
170- else if (argv[i][1 ]==' -' )
171- optnr=getoptnr (argv[i]+2 ); // multi-letter option with --XXX
172- else
173- {
174- // Multi-letter option -XXX, or single-letter with argument -Xval
175- // We first try single-letter.
176- optnr=getoptnr (argv[i][1 ]);
177-
178- if (!optnr.has_value ()) // try multi-letter
179- optnr=getoptnr (argv[i]+1 );
180- }
181-
182- if (!optnr.has_value ())
183- {
184- unknown_arg=argv[i];
185- return true ;
186- }
187-
188- options[*optnr].isset =true ;
189-
190- if (options[*optnr].hasval )
191- {
192- if (argv[i][2 ]==0 || options[*optnr].islong )
193- {
194- i++;
195- if (i==argc)
196- return true ;
197- if (argv[i][0 ]==' -' && argv[i][1 ]!=0 )
198- return true ;
199- options[*optnr].values .push_back (argv[i]);
200- }
201- else
202- options[*optnr].values .push_back (argv[i]+2 );
203- }
204- }
205- }
206-
207- return false ;
159+ return parse_arguments (argc, argv);
208160}
209161
210162cmdlinet::option_namest cmdlinet::option_names () const
@@ -315,6 +267,57 @@ cmdlinet::get_argument_suggestions(const std::string &unknown_argument)
315267 return final_suggestions;
316268}
317269
270+ bool cmdlinet::parse_arguments (int argc, const char **argv)
271+ {
272+ for (int i = 1 ; i < argc; i++)
273+ {
274+ if (argv[i][0 ] != ' -' )
275+ args.push_back (argv[i]);
276+ else
277+ {
278+ optionalt<std::size_t > optnr;
279+
280+ if (argv[i][1 ] != 0 && argv[i][2 ] == 0 )
281+ optnr = getoptnr (argv[i][1 ]); // single-letter option -X
282+ else if (argv[i][1 ] == ' -' )
283+ optnr = getoptnr (argv[i] + 2 ); // multi-letter option with --XXX
284+ else
285+ {
286+ // Multi-letter option -XXX, or single-letter with argument -Xval
287+ // We first try single-letter.
288+ optnr = getoptnr (argv[i][1 ]);
289+
290+ if (!optnr.has_value ()) // try multi-letter
291+ optnr = getoptnr (argv[i] + 1 );
292+ }
293+
294+ if (!optnr.has_value ())
295+ {
296+ unknown_arg = argv[i];
297+ return true ;
298+ }
299+
300+ options[*optnr].isset = true ;
301+
302+ if (options[*optnr].hasval )
303+ {
304+ if (argv[i][2 ] == 0 || options[*optnr].islong )
305+ {
306+ i++;
307+ if (i == argc)
308+ return true ;
309+ if (argv[i][0 ] == ' -' && argv[i][1 ] != 0 )
310+ return true ;
311+ options[*optnr].values .push_back (argv[i]);
312+ }
313+ else
314+ options[*optnr].values .push_back (argv[i] + 2 );
315+ }
316+ }
317+ }
318+ return false ;
319+ }
320+
318321cmdlinet::option_namest::option_names_iteratort::option_names_iteratort (
319322 const cmdlinet *command_line,
320323 std::size_t index)
0 commit comments