1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: ^L
21: #ifdef HAVE_CONFIG_H
22: #include <config.h>
23: #endif
24:
25: #ifdef _LIBC
26: # include <getopt.h>
27: #else
28: # include "getopt.h"
29: #endif
30: #include "getopt_int.h"
31:
32: #include <stdio.h>
33:
34:
35:
36:
37:
38:
39:
40:
41:
42: #define GETOPT_INTERFACE_VERSION 2
43: #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
44: #include <gnu-versions.h>
45: #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
46: #define ELIDE_CODE
47: #endif
48: #endif
49:
50: #ifndef ELIDE_CODE
51:
52:
53:
54:
55: #ifdef __GNU_LIBRARY__
56: #include <stdlib.h>
57: #endif
58:
59: #ifndef NULL
60: #define NULL 0
61: #endif
62:
63: int
64: getopt_long (int argc, char *const *argv, const char *options,
65: const struct option *long_options, int *opt_index)
66: {
67: return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
68: }
69:
70: int
71: _getopt_long_r (int argc, char *const *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: 0, d);
77: }
78:
79:
80:
81:
82:
83:
84: int
85: getopt_long_only (int argc, char *const *argv, const char *options,
86: const struct option *long_options, int *opt_index)
87: {
88: return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
89: }
90:
91: int
92: _getopt_long_only_r (int argc, char *const *argv, const char *options,
93: const struct option *long_options, int *opt_index,
94: struct _getopt_data *d)
95: {
96: return _getopt_internal_r (argc, argv, options, long_options, opt_index,
97: 1, d);
98: }
99:
100: #endif
101: ^L
102: #ifdef TEST
103:
104: #include <stdio.h>
105:
106: int
107: main (int argc, char **argv)
108: {
109: int c;
110: int digit_optind = 0;
111:
112: while (1)
113: {
114: int this_option_optind = optind ? optind : 1;
115: int option_index = 0;
116: static struct option long_options[] =
117: {
118: {"add", 1, 0, 0},
119: {"append", 0, 0, 0},
120: {"delete", 1, 0, 0},
121: {"verbose", 0, 0, 0},
122: {"create", 0, 0, 0},
123: {"file", 1, 0, 0},
124: {0, 0, 0, 0}
125: };
126:
127: c = getopt_long (argc, argv, "abc:d:0123456789",
128: long_options, &option_index);
129: if (c == -1)
130: break;
131:
132: switch (c)
133: {
134: case 0:
135: printf ("option %s", long_options[option_index].name);
136: if (optarg)
137: printf (" with arg %s", optarg);
138: printf ("\n");
139: break;
140:
141: case '0':
142: case '1':
143: case '2':
144: case '3':
145: case '4':
146: case '5':
147: case '6':
148: case '7':
149: case '8':
150: case '9':
151: if (digit_optind != 0 && digit_optind != this_option_optind)
152: printf ("digits occur in two different argv-elements.\n");
153: digit_optind = this_option_optind;
154: printf ("option %c\n", c);
155: break;
156:
157: case 'a':
158: printf ("option a\n");
159: break;
160:
161: case 'b':
162: printf ("option b\n");
163: break;
164:
165: case 'c':
166: printf ("option c with value `%s'\n", optarg);
167: break;
168:
169: case 'd':
170: printf ("option d with value `%s'\n", optarg);
171: break;
172:
173: case '?':
174: break;
175:
176: default:
177: printf ("?? getopt returned character code 0%o ??\n", c);
178: }
179: }
180:
181: if (optind < argc)
182: {
183: printf ("non-option ARGV-elements: ");
184: while (optind < argc)
185: printf ("%s ", argv[optind++]);
186: printf ("\n");
187: }
188:
189: exit (0);
190: }
191:
192: #endif