diff options
Diffstat (limited to 'gl/getopt.in.h')
-rw-r--r-- | gl/getopt.in.h | 242 |
1 files changed, 24 insertions, 218 deletions
diff --git a/gl/getopt.in.h b/gl/getopt.in.h index d9c7d81..0867d36 100644 --- a/gl/getopt.in.h +++ b/gl/getopt.in.h | |||
@@ -1,20 +1,22 @@ | |||
1 | /* Declarations for getopt. | 1 | /* Declarations for getopt. |
2 | Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2013 Free Software | 2 | Copyright (C) 1989-2023 Free Software Foundation, Inc. |
3 | Foundation, Inc. | 3 | This file is part of gnulib. |
4 | This file is part of the GNU C Library. | 4 | Unlike most of the getopt implementation, it is NOT shared |
5 | 5 | with the GNU C Library, which supplies a different version of | |
6 | This program is free software: you can redistribute it and/or modify | 6 | this file. |
7 | it under the terms of the GNU General Public License as published by | 7 | |
8 | the Free Software Foundation; either version 3 of the License, or | 8 | This file is free software: you can redistribute it and/or modify |
9 | (at your option) any later version. | 9 | it under the terms of the GNU Lesser General Public License as |
10 | 10 | published by the Free Software Foundation; either version 2.1 of the | |
11 | This program is distributed in the hope that it will be useful, | 11 | License, or (at your option) any later version. |
12 | |||
13 | This file is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. | 16 | GNU Lesser General Public License for more details. |
15 | 17 | ||
16 | You should have received a copy of the GNU General Public License | 18 | You should have received a copy of the GNU Lesser General Public License |
17 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | 19 | along with this program. If not, see <https://www.gnu.org/licenses/>. */ |
18 | 20 | ||
19 | #ifndef _@GUARD_PREFIX@_GETOPT_H | 21 | #ifndef _@GUARD_PREFIX@_GETOPT_H |
20 | 22 | ||
@@ -32,22 +34,15 @@ | |||
32 | # undef _GL_SYSTEM_GETOPT | 34 | # undef _GL_SYSTEM_GETOPT |
33 | #endif | 35 | #endif |
34 | 36 | ||
35 | #ifndef _@GUARD_PREFIX@_GETOPT_H | 37 | #define _@GUARD_PREFIX@_GETOPT_H 1 |
36 | |||
37 | #ifndef __need_getopt | ||
38 | # define _@GUARD_PREFIX@_GETOPT_H 1 | ||
39 | #endif | ||
40 | 38 | ||
41 | /* Standalone applications should #define __GETOPT_PREFIX to an | 39 | /* Standalone applications should #define __GETOPT_PREFIX to an |
42 | identifier that prefixes the external functions and variables | 40 | identifier that prefixes the external functions and variables |
43 | defined in this header. When this happens, include the | 41 | defined in getopt-core.h and getopt-ext.h. When this happens, |
44 | headers that might declare getopt so that they will not cause | 42 | include the headers that might declare getopt so that they will not |
45 | confusion if included after this file (if the system had <getopt.h>, | 43 | cause confusion if included after this file (if the system had |
46 | we have already included it). Then systematically rename | 44 | <getopt.h>, we have already included it). */ |
47 | identifiers so that they do not collide with the system functions | 45 | #if defined __GETOPT_PREFIX |
48 | and variables. Renaming avoids problems with some compilers and | ||
49 | linkers. */ | ||
50 | #if defined __GETOPT_PREFIX && !defined __need_getopt | ||
51 | # if !@HAVE_GETOPT_H@ | 46 | # if !@HAVE_GETOPT_H@ |
52 | # define __need_system_stdlib_h | 47 | # define __need_system_stdlib_h |
53 | # include <stdlib.h> | 48 | # include <stdlib.h> |
@@ -55,201 +50,12 @@ | |||
55 | # include <stdio.h> | 50 | # include <stdio.h> |
56 | # include <unistd.h> | 51 | # include <unistd.h> |
57 | # endif | 52 | # endif |
58 | # undef __need_getopt | ||
59 | # undef getopt | ||
60 | # undef getopt_long | ||
61 | # undef getopt_long_only | ||
62 | # undef optarg | ||
63 | # undef opterr | ||
64 | # undef optind | ||
65 | # undef optopt | ||
66 | # undef option | ||
67 | # define __GETOPT_CONCAT(x, y) x ## y | ||
68 | # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) | ||
69 | # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) | ||
70 | # define getopt __GETOPT_ID (getopt) | ||
71 | # define getopt_long __GETOPT_ID (getopt_long) | ||
72 | # define getopt_long_only __GETOPT_ID (getopt_long_only) | ||
73 | # define optarg __GETOPT_ID (optarg) | ||
74 | # define opterr __GETOPT_ID (opterr) | ||
75 | # define optind __GETOPT_ID (optind) | ||
76 | # define optopt __GETOPT_ID (optopt) | ||
77 | # define option __GETOPT_ID (option) | ||
78 | # define _getopt_internal __GETOPT_ID (getopt_internal) | ||
79 | #endif | ||
80 | |||
81 | /* Standalone applications get correct prototypes for getopt_long and | ||
82 | getopt_long_only; they declare "char **argv". libc uses prototypes | ||
83 | with "char *const *argv" that are incorrect because getopt_long and | ||
84 | getopt_long_only can permute argv; this is required for backward | ||
85 | compatibility (e.g., for LSB 2.0.1). | ||
86 | |||
87 | This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt', | ||
88 | but it caused redefinition warnings if both unistd.h and getopt.h were | ||
89 | included, since unistd.h includes getopt.h having previously defined | ||
90 | __need_getopt. | ||
91 | |||
92 | The only place where __getopt_argv_const is used is in definitions | ||
93 | of getopt_long and getopt_long_only below, but these are visible | ||
94 | only if __need_getopt is not defined, so it is quite safe to rewrite | ||
95 | the conditional as follows: | ||
96 | */ | ||
97 | #if !defined __need_getopt | ||
98 | # if defined __GETOPT_PREFIX | ||
99 | # define __getopt_argv_const /* empty */ | ||
100 | # else | ||
101 | # define __getopt_argv_const const | ||
102 | # endif | ||
103 | #endif | ||
104 | |||
105 | /* If __GNU_LIBRARY__ is not already defined, either we are being used | ||
106 | standalone, or this is the first header included in the source file. | ||
107 | If we are being used with glibc, we need to include <features.h>, but | ||
108 | that does not exist if we are standalone. So: if __GNU_LIBRARY__ is | ||
109 | not defined, include <ctype.h>, which will pull in <features.h> for us | ||
110 | if it's from glibc. (Why ctype.h? It's guaranteed to exist and it | ||
111 | doesn't flood the namespace with stuff the way some other headers do.) */ | ||
112 | #if !defined __GNU_LIBRARY__ | ||
113 | # include <ctype.h> | ||
114 | #endif | ||
115 | |||
116 | #ifndef __THROW | ||
117 | # ifndef __GNUC_PREREQ | ||
118 | # define __GNUC_PREREQ(maj, min) (0) | ||
119 | # endif | ||
120 | # if defined __cplusplus && __GNUC_PREREQ (2,8) | ||
121 | # define __THROW throw () | ||
122 | # else | ||
123 | # define __THROW | ||
124 | # endif | ||
125 | #endif | 53 | #endif |
126 | 54 | ||
127 | /* The definition of _GL_ARG_NONNULL is copied here. */ | 55 | /* The definition of _GL_ARG_NONNULL is copied here. */ |
128 | 56 | ||
129 | #ifdef __cplusplus | 57 | #include <getopt-cdefs.h> |
130 | extern "C" { | 58 | #include <getopt-pfx-core.h> |
131 | #endif | 59 | #include <getopt-pfx-ext.h> |
132 | |||
133 | /* For communication from 'getopt' to the caller. | ||
134 | When 'getopt' finds an option that takes an argument, | ||
135 | the argument value is returned here. | ||
136 | Also, when 'ordering' is RETURN_IN_ORDER, | ||
137 | each non-option ARGV-element is returned here. */ | ||
138 | |||
139 | extern char *optarg; | ||
140 | |||
141 | /* Index in ARGV of the next element to be scanned. | ||
142 | This is used for communication to and from the caller | ||
143 | and for communication between successive calls to 'getopt'. | ||
144 | |||
145 | On entry to 'getopt', zero means this is the first call; initialize. | ||
146 | |||
147 | When 'getopt' returns -1, this is the index of the first of the | ||
148 | non-option elements that the caller should itself scan. | ||
149 | |||
150 | Otherwise, 'optind' communicates from one call to the next | ||
151 | how much of ARGV has been scanned so far. */ | ||
152 | |||
153 | extern int optind; | ||
154 | |||
155 | /* Callers store zero here to inhibit the error message 'getopt' prints | ||
156 | for unrecognized options. */ | ||
157 | |||
158 | extern int opterr; | ||
159 | 60 | ||
160 | /* Set to an option character which was unrecognized. */ | ||
161 | |||
162 | extern int optopt; | ||
163 | |||
164 | #ifndef __need_getopt | ||
165 | /* Describe the long-named options requested by the application. | ||
166 | The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector | ||
167 | of 'struct option' terminated by an element containing a name which is | ||
168 | zero. | ||
169 | |||
170 | The field 'has_arg' is: | ||
171 | no_argument (or 0) if the option does not take an argument, | ||
172 | required_argument (or 1) if the option requires an argument, | ||
173 | optional_argument (or 2) if the option takes an optional argument. | ||
174 | |||
175 | If the field 'flag' is not NULL, it points to a variable that is set | ||
176 | to the value given in the field 'val' when the option is found, but | ||
177 | left unchanged if the option is not found. | ||
178 | |||
179 | To have a long-named option do something other than set an 'int' to | ||
180 | a compiled-in constant, such as set a value from 'optarg', set the | ||
181 | option's 'flag' field to zero and its 'val' field to a nonzero | ||
182 | value (the equivalent single-letter option character, if there is | ||
183 | one). For long options that have a zero 'flag' field, 'getopt' | ||
184 | returns the contents of the 'val' field. */ | ||
185 | |||
186 | # if !GNULIB_defined_struct_option | ||
187 | struct option | ||
188 | { | ||
189 | const char *name; | ||
190 | /* has_arg can't be an enum because some compilers complain about | ||
191 | type mismatches in all the code that assumes it is an int. */ | ||
192 | int has_arg; | ||
193 | int *flag; | ||
194 | int val; | ||
195 | }; | ||
196 | # define GNULIB_defined_struct_option 1 | ||
197 | # endif | ||
198 | |||
199 | /* Names for the values of the 'has_arg' field of 'struct option'. */ | ||
200 | |||
201 | # define no_argument 0 | ||
202 | # define required_argument 1 | ||
203 | # define optional_argument 2 | ||
204 | #endif /* need getopt */ | ||
205 | |||
206 | |||
207 | /* Get definitions and prototypes for functions to process the | ||
208 | arguments in ARGV (ARGC of them, minus the program name) for | ||
209 | options given in OPTS. | ||
210 | |||
211 | Return the option character from OPTS just read. Return -1 when | ||
212 | there are no more options. For unrecognized options, or options | ||
213 | missing arguments, 'optopt' is set to the option letter, and '?' is | ||
214 | returned. | ||
215 | |||
216 | The OPTS string is a list of characters which are recognized option | ||
217 | letters, optionally followed by colons, specifying that that letter | ||
218 | takes an argument, to be placed in 'optarg'. | ||
219 | |||
220 | If a letter in OPTS is followed by two colons, its argument is | ||
221 | optional. This behavior is specific to the GNU 'getopt'. | ||
222 | |||
223 | The argument '--' causes premature termination of argument | ||
224 | scanning, explicitly telling 'getopt' that there are no more | ||
225 | options. | ||
226 | |||
227 | If OPTS begins with '-', then non-option arguments are treated as | ||
228 | arguments to the option '\1'. This behavior is specific to the GNU | ||
229 | 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in | ||
230 | the environment, then do not permute arguments. */ | ||
231 | |||
232 | extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) | ||
233 | __THROW _GL_ARG_NONNULL ((2, 3)); | ||
234 | |||
235 | #ifndef __need_getopt | ||
236 | extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, | ||
237 | const char *__shortopts, | ||
238 | const struct option *__longopts, int *__longind) | ||
239 | __THROW _GL_ARG_NONNULL ((2, 3)); | ||
240 | extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, | ||
241 | const char *__shortopts, | ||
242 | const struct option *__longopts, int *__longind) | ||
243 | __THROW _GL_ARG_NONNULL ((2, 3)); | ||
244 | |||
245 | #endif | ||
246 | |||
247 | #ifdef __cplusplus | ||
248 | } | ||
249 | #endif | ||
250 | |||
251 | /* Make sure we later can get all the definitions and declarations. */ | ||
252 | #undef __need_getopt | ||
253 | |||
254 | #endif /* _@GUARD_PREFIX@_GETOPT_H */ | ||
255 | #endif /* _@GUARD_PREFIX@_GETOPT_H */ | 61 | #endif /* _@GUARD_PREFIX@_GETOPT_H */ |