VirtualBox

source: kBuild/vendor/grep/3.7/lib/getopt1.c@ 3529

Last change on this file since 3529 was 3529, checked in by bird, 3 years ago

Imported grep 3.7 from grep-3.7.tar.gz (sha256: c22b0cf2d4f6bbe599c902387e8058990e1eee99aef333a203829e5fd3dbb342), applying minimal auto-props.

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1/* getopt_long and getopt_long_only entry points for GNU getopt.
2 Copyright (C) 1987-2021 Free Software Foundation, Inc.
3 This file is part of the GNU C Library and is also part of gnulib.
4 Patches to this file should be submitted to both projects.
5
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, see
18 <https://www.gnu.org/licenses/>. */
19
20
21#ifndef _LIBC
22# include <config.h>
23#endif
24
25#include "getopt.h"
26#include "getopt_int.h"
27
28int
29getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
30 const struct option *long_options, int *opt_index)
31{
32 return _getopt_internal (argc, (char **) argv, options, long_options,
33 opt_index, 0, 0);
34}
35
36int
37_getopt_long_r (int argc, char **argv, const char *options,
38 const struct option *long_options, int *opt_index,
39 struct _getopt_data *d)
40{
41 return _getopt_internal_r (argc, argv, options, long_options, opt_index,
42 0, d, 0);
43}
44
45/* Like getopt_long, but '-' as well as '--' can indicate a long option.
46 If an option that starts with '-' (not '--') doesn't match a long option,
47 but does match a short option, it is parsed as a short option
48 instead. */
49
50int
51getopt_long_only (int argc, char *__getopt_argv_const *argv,
52 const char *options,
53 const struct option *long_options, int *opt_index)
54{
55 return _getopt_internal (argc, (char **) argv, options, long_options,
56 opt_index, 1, 0);
57}
58
59int
60_getopt_long_only_r (int argc, char **argv, const char *options,
61 const struct option *long_options, int *opt_index,
62 struct _getopt_data *d)
63{
64 return _getopt_internal_r (argc, argv, options, long_options, opt_index,
65 1, d, 0);
66}
67
68
69
70#ifdef TEST
71
72#include <stdio.h>
73#include <stdlib.h>
74
75int
76main (int argc, char **argv)
77{
78 int c;
79 int digit_optind = 0;
80
81 while (1)
82 {
83 int this_option_optind = optind ? optind : 1;
84 int option_index = 0;
85 static const struct option long_options[] =
86 {
87 {"add", 1, 0, 0},
88 {"append", 0, 0, 0},
89 {"delete", 1, 0, 0},
90 {"verbose", 0, 0, 0},
91 {"create", 0, 0, 0},
92 {"file", 1, 0, 0},
93 {0, 0, 0, 0}
94 };
95
96 c = getopt_long (argc, argv, "abc:d:0123456789",
97 long_options, &option_index);
98 if (c == -1)
99 break;
100
101 switch (c)
102 {
103 case 0:
104 printf ("option %s", long_options[option_index].name);
105 if (optarg)
106 printf (" with arg %s", optarg);
107 printf ("\n");
108 break;
109
110 case '0':
111 case '1':
112 case '2':
113 case '3':
114 case '4':
115 case '5':
116 case '6':
117 case '7':
118 case '8':
119 case '9':
120 if (digit_optind != 0 && digit_optind != this_option_optind)
121 printf ("digits occur in two different argv-elements.\n");
122 digit_optind = this_option_optind;
123 printf ("option %c\n", c);
124 break;
125
126 case 'a':
127 printf ("option a\n");
128 break;
129
130 case 'b':
131 printf ("option b\n");
132 break;
133
134 case 'c':
135 printf ("option c with value '%s'\n", optarg);
136 break;
137
138 case 'd':
139 printf ("option d with value '%s'\n", optarg);
140 break;
141
142 case '?':
143 break;
144
145 default:
146 printf ("?? getopt returned character code 0%o ??\n", c);
147 }
148 }
149
150 if (optind < argc)
151 {
152 printf ("non-option ARGV-elements: ");
153 while (optind < argc)
154 printf ("%s ", argv[optind++]);
155 printf ("\n");
156 }
157
158 exit (0);
159}
160
161#endif /* TEST */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette