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