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