"Fossies" - the Fresh Open Source Software Archive 
Member "which-2.21/getopt1.c" (25 May 2007, 4611 Bytes) of package /linux/privat/which-2.21.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "getopt1.c" see the
Fossies "Dox" file reference documentation.
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 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public
16 License along with the GNU C Library; see the file COPYING.LIB. If not,
17 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02110-1301, USA. */
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #ifndef HAVE_GETOPT_LONG
25
26 #include "getopt.h"
27
28 #if !defined (__STDC__) || !__STDC__
29 /* This is a separate conditional since some stdc systems
30 reject `defined (const)'. */
31 #ifndef const
32 #define const
33 #endif
34 #endif
35
36 #include <stdio.h>
37
38 /* Comment out all this code if we are using the GNU C Library, and are not
39 actually compiling the library itself. This code is part of the GNU C
40 Library, but also included in many other GNU distributions. Compiling
41 and linking in this code is a waste when using the GNU C library
42 (especially if it is a shared library). Rather than having every GNU
43 program understand `configure --with-gnu-libc' and omit the object files,
44 it is simpler to just do this in the source for each such file. */
45
46 #define GETOPT_INTERFACE_VERSION 2
47 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
48 #include <gnu-versions.h>
49 #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
50 #define ELIDE_CODE
51 #endif
52 #endif
53
54 #ifndef ELIDE_CODE
55
56
57 /* This needs to come after some library #include
58 to get __GNU_LIBRARY__ defined. */
59 #ifdef __GNU_LIBRARY__
60 #include <stdlib.h>
61 #endif
62
63 #ifndef NULL
64 #define NULL 0
65 #endif
66
67 int
68 getopt_long (argc, argv, options, long_options, opt_index)
69 int argc;
70 char *const *argv;
71 const char *options;
72 const struct option *long_options;
73 int *opt_index;
74 {
75 return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
76 }
77
78 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
79 If an option that starts with '-' (not '--') doesn't match a long option,
80 but does match a short option, it is parsed as a short option
81 instead. */
82
83 int
84 getopt_long_only (argc, argv, options, long_options, opt_index)
85 int argc;
86 char *const *argv;
87 const char *options;
88 const struct option *long_options;
89 int *opt_index;
90 {
91 return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
92 }
93
94
95 #endif /* Not ELIDE_CODE. */
96 #endif /* Not HAVE_GETOPT_LONG. */
97
98 #ifdef TEST
99
100 #include <stdio.h>
101
102 int
103 main (argc, argv)
104 int argc;
105 char **argv;
106 {
107 int c;
108 int digit_optind = 0;
109
110 while (1)
111 {
112 int this_option_optind = optind ? optind : 1;
113 int option_index = 0;
114 static struct option long_options[] =
115 {
116 {"add", 1, 0, 0},
117 {"append", 0, 0, 0},
118 {"delete", 1, 0, 0},
119 {"verbose", 0, 0, 0},
120 {"create", 0, 0, 0},
121 {"file", 1, 0, 0},
122 {0, 0, 0, 0}
123 };
124
125 c = getopt_long (argc, argv, "abc:d:0123456789",
126 long_options, &option_index);
127 if (c == -1)
128 break;
129
130 switch (c)
131 {
132 case 0:
133 printf ("option %s", long_options[option_index].name);
134 if (optarg)
135 printf (" with arg %s", optarg);
136 printf ("\n");
137 break;
138
139 case '0':
140 case '1':
141 case '2':
142 case '3':
143 case '4':
144 case '5':
145 case '6':
146 case '7':
147 case '8':
148 case '9':
149 if (digit_optind != 0 && digit_optind != this_option_optind)
150 printf ("digits occur in two different argv-elements.\n");
151 digit_optind = this_option_optind;
152 printf ("option %c\n", c);
153 break;
154
155 case 'a':
156 printf ("option a\n");
157 break;
158
159 case 'b':
160 printf ("option b\n");
161 break;
162
163 case 'c':
164 printf ("option c with value `%s'\n", optarg);
165 break;
166
167 case 'd':
168 printf ("option d with value `%s'\n", optarg);
169 break;
170
171 case '?':
172 break;
173
174 default:
175 printf ("?? getopt returned character code 0%o ??\n", c);
176 }
177 }
178
179 if (optind < argc)
180 {
181 printf ("non-option ARGV-elements: ");
182 while (optind < argc)
183 printf ("%s ", argv[optind++]);
184 printf ("\n");
185 }
186
187 exit (0);
188 }
189
190 #endif /* TEST */