Mercurial > hg-old > index.cgi
comparison lib/getopt1.c @ 272:d5392bb5da3c 2.5
Added generated files
author | lost |
---|---|
date | Sun, 16 Aug 2009 17:16:49 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
271:3b793ba7a6c6 | 272:d5392bb5da3c |
---|---|
1 /* getopt_long and getopt_long_only entry points for GNU getopt. | |
2 Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006 | |
3 Free Software Foundation, Inc. | |
4 This file is part of the GNU C Library. | |
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. | |
10 | |
11 This program 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 | |
14 GNU General Public License for more details. | |
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/>. */ | |
18 | |
19 #ifdef _LIBC | |
20 # include <getopt.h> | |
21 #else | |
22 # include <config.h> | |
23 # include "getopt.h" | |
24 #endif | |
25 #include "getopt_int.h" | |
26 | |
27 #include <stdio.h> | |
28 | |
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 | |
38 | |
39 int | |
40 getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, | |
41 const struct option *long_options, int *opt_index) | |
42 { | |
43 return _getopt_internal (argc, (char **) argv, options, long_options, | |
44 opt_index, 0, 0); | |
45 } | |
46 | |
47 int | |
48 _getopt_long_r (int argc, char **argv, const char *options, | |
49 const struct option *long_options, int *opt_index, | |
50 struct _getopt_data *d) | |
51 { | |
52 return _getopt_internal_r (argc, argv, options, long_options, opt_index, | |
53 0, 0, d); | |
54 } | |
55 | |
56 /* Like getopt_long, but '-' as well as '--' can indicate a long option. | |
57 If an option that starts with '-' (not '--') doesn't match a long option, | |
58 but does match a short option, it is parsed as a short option | |
59 instead. */ | |
60 | |
61 int | |
62 getopt_long_only (int argc, char *__getopt_argv_const *argv, | |
63 const char *options, | |
64 const struct option *long_options, int *opt_index) | |
65 { | |
66 return _getopt_internal (argc, (char **) argv, options, long_options, | |
67 opt_index, 1, 0); | |
68 } | |
69 | |
70 int | |
71 _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) | |
74 { | |
75 return _getopt_internal_r (argc, argv, options, long_options, opt_index, | |
76 1, 0, d); | |
77 } | |
78 | |
79 | |
80 #ifdef TEST | |
81 | |
82 #include <stdio.h> | |
83 | |
84 int | |
85 main (int argc, char **argv) | |
86 { | |
87 int c; | |
88 int digit_optind = 0; | |
89 | |
90 while (1) | |
91 { | |
92 int this_option_optind = optind ? optind : 1; | |
93 int option_index = 0; | |
94 static struct option long_options[] = | |
95 { | |
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} | |
103 }; | |
104 | |
105 c = getopt_long (argc, argv, "abc:d:0123456789", | |
106 long_options, &option_index); | |
107 if (c == -1) | |
108 break; | |
109 | |
110 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 } | |
157 } | |
158 | |
159 if (optind < argc) | |
160 { | |
161 printf ("non-option ARGV-elements: "); | |
162 while (optind < argc) | |
163 printf ("%s ", argv[optind++]); | |
164 printf ("\n"); | |
165 } | |
166 | |
167 exit (0); | |
168 } | |
169 | |
170 #endif /* TEST */ |