gdb/
[deliverable/binutils-gdb.git] / gdb / mi / mi-getopt.c
CommitLineData
fb40c209 1/* MI Command Set - MI Option Parser.
28e7fd62 2 Copyright (C) 2000-2013 Free Software Foundation, Inc.
ab91fdd5 3 Contributed by Cygnus Solutions (a Red Hat company).
fb40c209
AC
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
fb40c209
AC
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
fb40c209
AC
19
20#include "defs.h"
21#include "mi-getopt.h"
27b82ed2 22#include "gdb_string.h"
fb40c209
AC
23
24int
25mi_getopt (const char *prefix,
26 int argc, char **argv,
91174723 27 const struct mi_opt *opts,
324478ca 28 int *oind, char **oarg)
fb40c209
AC
29{
30 char *arg;
91174723 31 const struct mi_opt *opt;
102040f0 32
2b03b41d 33 /* We assume that argv/argc are ok. */
324478ca 34 if (*oind > argc || *oind < 0)
8e65ff28 35 internal_error (__FILE__, __LINE__,
324478ca
AS
36 _("mi_getopt_long: oind out of bounds"));
37 if (*oind == argc)
fb40c209 38 return -1;
324478ca 39 arg = argv[*oind];
fb40c209
AC
40 /* ``--''? */
41 if (strcmp (arg, "--") == 0)
42 {
324478ca
AS
43 *oind += 1;
44 *oarg = NULL;
fb40c209
AC
45 return -1;
46 }
2b03b41d 47 /* End of option list. */
fb40c209
AC
48 if (arg[0] != '-')
49 {
324478ca 50 *oarg = NULL;
fb40c209
AC
51 return -1;
52 }
2b03b41d 53 /* Look the option up. */
fb40c209
AC
54 for (opt = opts; opt->name != NULL; opt++)
55 {
56 if (strcmp (opt->name, arg + 1) != 0)
57 continue;
58 if (opt->arg_p)
59 {
2b03b41d 60 /* A non-simple oarg option. */
324478ca 61 if (argc < *oind + 2)
8a3fe4f8 62 error (_("%s: Option %s requires an argument"), prefix, arg);
324478ca
AS
63 *oarg = argv[(*oind) + 1];
64 *oind = (*oind) + 2;
fb40c209
AC
65 return opt->index;
66 }
67 else
68 {
324478ca
AS
69 *oarg = NULL;
70 *oind = (*oind) + 1;
fb40c209
AC
71 return opt->index;
72 }
73 }
8a3fe4f8 74 error (_("%s: Unknown option ``%s''"), prefix, arg + 1);
fb40c209 75}
1abaf70c
BR
76
77int
78mi_valid_noargs (const char *prefix, int argc, char **argv)
79{
324478ca
AS
80 int oind = 0;
81 char *oarg;
91174723 82 static const struct mi_opt opts[] =
2b03b41d
SS
83 {
84 { 0, 0, 0 }
85 };
1abaf70c 86
324478ca 87 if (mi_getopt (prefix, argc, argv, opts, &oind, &oarg) == -1)
1abaf70c
BR
88 return 1;
89 else
90 return 0;
91}
This page took 1.017556 seconds and 4 git commands to generate.