Annotation of embedaddon/smartmontools/getopt/getopt1.c, revision 1.1.1.1
1.1 misho 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
3: Free Software Foundation, Inc.
4: This file is part of the GNU C Library.
5:
6: The GNU C Library is free software; you can redistribute it and/or
7: modify it under the terms of the GNU Lesser General Public
8: License as published by the Free Software Foundation; either
9: version 2.1 of the License, or (at your option) any later version.
10:
11: The GNU C Library 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 GNU
14: Lesser General Public License for more details.
15:
16: You should have received a copy of the GNU Lesser General Public
17: License along with the GNU C Library; if not, write to the Free
18: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19: 02111-1307 USA. */
20:
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:
31: #if !defined __STDC__ || !__STDC__
32: /* This is a separate conditional since some stdc systems
33: reject `defined (const)'. */
34: #ifndef const
35: #define const
36: #endif
37: #endif
38:
39: #include <stdio.h>
40:
41: /* Comment out all this code if we are using the GNU C Library, and are not
42: actually compiling the library itself. This code is part of the GNU C
43: Library, but also included in many other GNU distributions. Compiling
44: and linking in this code is a waste when using the GNU C library
45: (especially if it is a shared library). Rather than having every GNU
46: program understand `configure --with-gnu-libc' and omit the object files,
47: it is simpler to just do this in the source for each such file. */
48:
49: #define GETOPT_INTERFACE_VERSION 2
50: #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
51: #include <gnu-versions.h>
52: #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
53: #define ELIDE_CODE
54: #endif
55: #endif
56:
57: #ifndef ELIDE_CODE
58:
59:
60: /* This needs to come after some library #include
61: to get __GNU_LIBRARY__ defined. */
62: #ifdef __GNU_LIBRARY__
63: #include <stdlib.h>
64: #endif
65:
66: #ifndef NULL
67: #define NULL 0
68: #endif
69:
70: int
71: getopt_long (argc, argv, options, long_options, opt_index)
72: int argc;
73: char *const *argv;
74: const char *options;
75: const struct option *long_options;
76: int *opt_index;
77: {
78: return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
79: }
80:
81: /* Like getopt_long, but '-' as well as '--' can indicate a long option.
82: If an option that starts with '-' (not '--') doesn't match a long option,
83: but does match a short option, it is parsed as a short option
84: instead. */
85:
86: int
87: getopt_long_only (argc, argv, options, long_options, opt_index)
88: int argc;
89: char *const *argv;
90: const char *options;
91: const struct option *long_options;
92: int *opt_index;
93: {
94: return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
95: }
96:
97: # ifdef _LIBC
98: libc_hidden_def (getopt_long)
99: libc_hidden_def (getopt_long_only)
100: # endif
101:
102: #endif /* Not ELIDE_CODE. */
103:
104: #ifdef TEST
105:
106: #include <stdio.h>
107:
108: int
109: main (argc, argv)
110: int argc;
111: char **argv;
112: {
113: int c;
114: int digit_optind = 0;
115:
116: while (1)
117: {
118: int this_option_optind = optind ? optind : 1;
119: int option_index = 0;
120: static struct option long_options[] =
121: {
122: {"add", 1, 0, 0},
123: {"append", 0, 0, 0},
124: {"delete", 1, 0, 0},
125: {"verbose", 0, 0, 0},
126: {"create", 0, 0, 0},
127: {"file", 1, 0, 0},
128: {0, 0, 0, 0}
129: };
130:
131: c = getopt_long (argc, argv, "abc:d:0123456789",
132: long_options, &option_index);
133: if (c == -1)
134: break;
135:
136: switch (c)
137: {
138: case 0:
139: printf ("option %s", long_options[option_index].name);
140: if (optarg)
141: printf (" with arg %s", optarg);
142: printf ("\n");
143: break;
144:
145: case '0':
146: case '1':
147: case '2':
148: case '3':
149: case '4':
150: case '5':
151: case '6':
152: case '7':
153: case '8':
154: case '9':
155: if (digit_optind != 0 && digit_optind != this_option_optind)
156: printf ("digits occur in two different argv-elements.\n");
157: digit_optind = this_option_optind;
158: printf ("option %c\n", c);
159: break;
160:
161: case 'a':
162: printf ("option a\n");
163: break;
164:
165: case 'b':
166: printf ("option b\n");
167: break;
168:
169: case 'c':
170: printf ("option c with value `%s'\n", optarg);
171: break;
172:
173: case 'd':
174: printf ("option d with value `%s'\n", optarg);
175: break;
176:
177: case '?':
178: break;
179:
180: default:
181: printf ("?? getopt returned character code 0%o ??\n", c);
182: }
183: }
184:
185: if (optind < argc)
186: {
187: printf ("non-option ARGV-elements: ");
188: while (optind < argc)
189: printf ("%s ", argv[optind++]);
190: printf ("\n");
191: }
192:
193: exit (0);
194: }
195:
196: #endif /* TEST */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>