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