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