3 |
Free Software Foundation, Inc. |
Free Software Foundation, Inc. |
4 |
This file is part of the GNU C Library. |
This file is part of the GNU C Library. |
5 |
|
|
6 |
The GNU C Library is free software; you can redistribute it and/or |
This program is free software; you can redistribute it and/or modify |
7 |
modify it under the terms of the GNU Lesser General Public |
it under the terms of the GNU General Public License as published by |
8 |
License as published by the Free Software Foundation; either |
the Free Software Foundation; either version 2, or (at your option) |
9 |
version 2.1 of the License, or (at your option) any later version. |
any later version. |
10 |
|
|
11 |
The GNU C Library is distributed in the hope that it will be useful, |
This program is distributed in the hope that it will be useful, |
12 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 |
Lesser General Public License for more details. |
GNU General Public License for more details. |
15 |
|
|
16 |
You should have received a copy of the GNU Lesser General Public |
You should have received a copy of the GNU General Public License along |
17 |
License along with the GNU C Library; if not, write to the Free |
with this program; if not, write to the Free Software Foundation, |
18 |
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
02111-1307 USA. */ |
|
19 |
|
|
20 |
#ifndef _GETOPT_H |
#ifndef _GETOPT_H |
21 |
|
|
23 |
# define _GETOPT_H 1 |
# define _GETOPT_H 1 |
24 |
#endif |
#endif |
25 |
|
|
26 |
|
/* Standalone applications should #define __GETOPT_PREFIX to an |
27 |
|
identifier that prefixes the external functions and variables |
28 |
|
defined in this header. When this happens, include the |
29 |
|
headers that might declare getopt so that they will not cause |
30 |
|
confusion if included after this file. Then systematically rename |
31 |
|
identifiers so that they do not collide with the system functions |
32 |
|
and variables. Renaming avoids problems with some compilers and |
33 |
|
linkers. */ |
34 |
|
#if defined __GETOPT_PREFIX && !defined __need_getopt |
35 |
|
# include <stdlib.h> |
36 |
|
# include <stdio.h> |
37 |
|
# if HAVE_UNISTD_H |
38 |
|
# include <unistd.h> |
39 |
|
# endif |
40 |
|
# undef __need_getopt |
41 |
|
# undef getopt |
42 |
|
# undef getopt_long |
43 |
|
# undef getopt_long_only |
44 |
|
# undef optarg |
45 |
|
# undef opterr |
46 |
|
# undef optind |
47 |
|
# undef optopt |
48 |
|
# define __GETOPT_CONCAT(x, y) x ## y |
49 |
|
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) |
50 |
|
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) |
51 |
|
# define getopt __GETOPT_ID (getopt) |
52 |
|
# define getopt_long __GETOPT_ID (getopt_long) |
53 |
|
# define getopt_long_only __GETOPT_ID (getopt_long_only) |
54 |
|
# define optarg __GETOPT_ID (optarg) |
55 |
|
# define opterr __GETOPT_ID (opterr) |
56 |
|
# define optind __GETOPT_ID (optind) |
57 |
|
# define optopt __GETOPT_ID (optopt) |
58 |
|
#endif |
59 |
|
|
60 |
|
/* Standalone applications get correct prototypes for getopt_long and |
61 |
|
getopt_long_only; they declare "char **argv". libc uses prototypes |
62 |
|
with "char *const *argv" that are incorrect because getopt_long and |
63 |
|
getopt_long_only can permute argv; this is required for backward |
64 |
|
compatibility (e.g., for LSB 2.0.1). |
65 |
|
|
66 |
|
This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', |
67 |
|
but it caused redefinition warnings if both unistd.h and getopt.h were |
68 |
|
included, since unistd.h includes getopt.h having previously defined |
69 |
|
__need_getopt. |
70 |
|
|
71 |
|
The only place where __getopt_argv_const is used is in definitions |
72 |
|
of getopt_long and getopt_long_only below, but these are visible |
73 |
|
only if __need_getopt is not defined, so it is quite safe to rewrite |
74 |
|
the conditional as follows: |
75 |
|
*/ |
76 |
|
#if !defined __need_getopt |
77 |
|
# if defined __GETOPT_PREFIX |
78 |
|
# define __getopt_argv_const /* empty */ |
79 |
|
# else |
80 |
|
# define __getopt_argv_const const |
81 |
|
# endif |
82 |
|
#endif |
83 |
|
|
84 |
/* If __GNU_LIBRARY__ is not already defined, either we are being used |
/* If __GNU_LIBRARY__ is not already defined, either we are being used |
85 |
standalone, or this is the first header included in the source file. |
standalone, or this is the first header included in the source file. |
86 |
If we are being used with glibc, we need to include <features.h>, but |
If we are being used with glibc, we need to include <features.h>, but |
147 |
The field `has_arg' is: |
The field `has_arg' is: |
148 |
no_argument (or 0) if the option does not take an argument, |
no_argument (or 0) if the option does not take an argument, |
149 |
required_argument (or 1) if the option requires an argument, |
required_argument (or 1) if the option requires an argument, |
150 |
optional_argument (or 2) if the option takes an optional argument. |
optional_argument (or 2) if the option takes an optional argument. |
151 |
|
|
152 |
If the field `flag' is not NULL, it points to a variable that is set |
If the field `flag' is not NULL, it points to a variable that is set |
153 |
to the value given in the field `val' when the option is found, but |
to the value given in the field `val' when the option is found, but |
202 |
arguments to the option '\0'. This behavior is specific to the GNU |
arguments to the option '\0'. This behavior is specific to the GNU |
203 |
`getopt'. */ |
`getopt'. */ |
204 |
|
|
|
#ifdef __GNU_LIBRARY__ |
|
|
/* Many other libraries have conflicting prototypes for getopt, with |
|
|
differences in the consts, in stdlib.h. To avoid compilation |
|
|
errors, only prototype getopt for the GNU C library. */ |
|
205 |
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) |
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) |
206 |
__THROW; |
__THROW; |
|
#else /* not __GNU_LIBRARY__ */ |
|
|
extern int getopt (); |
|
|
#endif /* __GNU_LIBRARY__ */ |
|
207 |
|
|
208 |
#ifndef __need_getopt |
#ifndef __need_getopt |
209 |
extern int getopt_long (int ___argc, char *const *___argv, |
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, |
210 |
const char *__shortopts, |
const char *__shortopts, |
211 |
const struct option *__longopts, int *__longind) |
const struct option *__longopts, int *__longind) |
212 |
__THROW; |
__THROW; |
213 |
extern int getopt_long_only (int ___argc, char *const *___argv, |
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, |
214 |
const char *__shortopts, |
const char *__shortopts, |
215 |
const struct option *__longopts, int *__longind) |
const struct option *__longopts, int *__longind) |
216 |
__THROW; |
__THROW; |