VirtualBox

source: kBuild/trunk/src/kmk/getopt1.c@ 2657

Last change on this file since 2657 was 2591, checked in by bird, 13 years ago

kmk: Merged in changes from GNU make 3.82. Previous GNU make base version was gnumake-2008-10-28-CVS.

  • Property svn:eol-style set to native
File size: 4.3 KB
Line 
1/* getopt_long and getopt_long_only entry points for GNU getopt.
2Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
31998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
42010 Free Software Foundation, Inc.
5
6NOTE: The canonical source of this file is maintained with the GNU C Library.
7Bugs can be reported to [email protected].
8
9GNU Make is free software; you can redistribute it and/or modify it under the
10terms of the GNU General Public License as published by the Free Software
11Foundation; either version 3 of the License, or (at your option) any later
12version.
13
14GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
15WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License along with
19this program. If not, see <http://www.gnu.org/licenses/>. */
20
21
22#ifdef HAVE_CONFIG_H
23#include <config.h>
24#endif
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
67int
68getopt_long (int argc, char *const *argv, const char *options,
69 const struct option *long_options, int *opt_index)
70{
71 return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
72}
73
74/* Like getopt_long, but '-' as well as '--' can indicate a long option.
75 If an option that starts with '-' (not '--') doesn't match a long option,
76 but does match a short option, it is parsed as a short option
77 instead. */
78
79int
80getopt_long_only (int argc, char *const *argv, const char *options,
81 const struct option *long_options, int *opt_index)
82{
83 return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
84}
85
86
87#endif /* Not ELIDE_CODE. */
88
89
90#ifdef TEST
91
92#include <stdio.h>
93
94int
95main (int argc, char **argv)
96{
97 int c;
98 int digit_optind = 0;
99
100 while (1)
101 {
102 int this_option_optind = optind ? optind : 1;
103 int option_index = 0;
104 static struct option long_options[] =
105 {
106 {"add", 1, 0, 0},
107 {"append", 0, 0, 0},
108 {"delete", 1, 0, 0},
109 {"verbose", 0, 0, 0},
110 {"create", 0, 0, 0},
111 {"file", 1, 0, 0},
112 {0, 0, 0, 0}
113 };
114
115 c = getopt_long (argc, argv, "abc:d:0123456789",
116 long_options, &option_index);
117 if (c == -1)
118 break;
119
120 switch (c)
121 {
122 case 0:
123 printf ("option %s", long_options[option_index].name);
124 if (optarg)
125 printf (" with arg %s", optarg);
126 printf ("\n");
127 break;
128
129 case '0':
130 case '1':
131 case '2':
132 case '3':
133 case '4':
134 case '5':
135 case '6':
136 case '7':
137 case '8':
138 case '9':
139 if (digit_optind != 0 && digit_optind != this_option_optind)
140 printf ("digits occur in two different argv-elements.\n");
141 digit_optind = this_option_optind;
142 printf ("option %c\n", c);
143 break;
144
145 case 'a':
146 printf ("option a\n");
147 break;
148
149 case 'b':
150 printf ("option b\n");
151 break;
152
153 case 'c':
154 printf ("option c with value `%s'\n", optarg);
155 break;
156
157 case 'd':
158 printf ("option d with value `%s'\n", optarg);
159 break;
160
161 case '?':
162 break;
163
164 default:
165 printf ("?? getopt returned character code 0%o ??\n", c);
166 }
167 }
168
169 if (optind < argc)
170 {
171 printf ("non-option ARGV-elements: ");
172 while (optind < argc)
173 printf ("%s ", argv[optind++]);
174 printf ("\n");
175 }
176
177 exit (0);
178}
179
180#endif /* TEST */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette