cfengine  3.15.4
About: CFEngine is a configuration management system for configuring and maintaining Unix-like computers (using an own high level policy language). Community version.
  Fossies Dox: cfengine-3.15.4.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

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