16
16
You should have received a copy of the GNU General Public License along
17
17
with this program; if not, write to the Free Software Foundation,
18
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
18
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
23
23
# define _GETOPT_H 1
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
34
#if defined __GETOPT_PREFIX && !defined __need_getopt
43
# undef getopt_long_only
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)
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).
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
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:
76
#if !defined __need_getopt
77
# if defined __GETOPT_PREFIX
78
# define __getopt_argv_const /* empty */
80
# define __getopt_argv_const const
26
84
/* If __GNU_LIBRARY__ is not already defined, either we are being used
27
85
standalone, or this is the first header included in the source file.
28
86
If we are being used with glibc, we need to include <features.h>, but
89
147
The field `has_arg' is:
90
148
no_argument (or 0) if the option does not take an argument,
91
149
required_argument (or 1) if the option requires an argument,
92
optional_argument (or 2) if the option takes an optional argument.
150
optional_argument (or 2) if the option takes an optional argument.
94
152
If the field `flag' is not NULL, it points to a variable that is set
95
153
to the value given in the field `val' when the option is found, but
144
202
arguments to the option '\0'. This behavior is specific to the GNU
147
#ifdef __GNU_LIBRARY__
148
/* Many other libraries have conflicting prototypes for getopt, with
149
differences in the consts, in stdlib.h. To avoid compilation
150
errors, only prototype getopt for the GNU C library. */
151
205
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
153
#else /* not __GNU_LIBRARY__ */
154
extern int getopt ();
155
#endif /* __GNU_LIBRARY__ */
157
208
#ifndef __need_getopt
158
extern int getopt_long (int ___argc, char *const *___argv,
209
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
159
210
const char *__shortopts,
160
211
const struct option *__longopts, int *__longind)
162
extern int getopt_long_only (int ___argc, char *const *___argv,
213
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
163
214
const char *__shortopts,
164
215
const struct option *__longopts, int *__longind)