pidgin  2.13.0
About: Pidgin is a chat program (multi-protocol instant messaging client) which lets you log in to accounts on multiple chat networks simultaneously (old name "gaim").
  Fossies Dox: pidgin-2.13.0.tar.gz  ("inofficial" 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  Finch is the legal property of its developers, whose names are too numerous
3  to list here. Please refer to the COPYRIGHT file distributed with this
4  source distribution.
5 
6  This program is free software; you can redistribute it and/or modify it
7  under the terms of the GNU General Public License as published by the
8  Free Software Foundation; either version 2, or (at your option) any
9  later version.
10 
11  This program 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
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19 
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
23 
24 #include "getopt.h"
25 
26 #if !__STDC__ && !defined(const) && IN_GCC
27 #define const
28 #endif
29 
30 #include <stdio.h>
31 
32 /* Comment out all this code if we are using the GNU C Library, and are not
33  actually compiling the library itself. This code is part of the GNU C
34  Library, but also included in many other GNU distributions. Compiling
35  and linking in this code is a waste when using the GNU C library
36  (especially if it is a shared library). Rather than having every GNU
37  program understand `configure --with-gnu-libc' and omit the object files,
38  it is simpler to just do this in the source for each such file. */
39 
40 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
41 
42 
43 /* This needs to come after some library #include
44  to get __GNU_LIBRARY__ defined. */
45 #ifdef __GNU_LIBRARY__
46 #include <stdlib.h>
47 #else
48 char *getenv ();
49 #endif
50 
51 #ifndef NULL
52 #define NULL 0
53 #endif
54 
55 int
56 getopt_long (argc, argv, options, long_options, opt_index)
57  int argc;
58  char *const *argv;
59  const char *options;
60  const struct option *long_options;
61  int *opt_index;
62 {
63  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
64 }
65 
66 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
67  If an option that starts with '-' (not '--') doesn't match a long option,
68  but does match a short option, it is parsed as a short option
69  instead. */
70 
71 int
72 getopt_long_only (argc, argv, options, long_options, opt_index)
73  int argc;
74  char *const *argv;
75  const char *options;
76  const struct option *long_options;
77  int *opt_index;
78 {
79  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
80 }
81 
82 
83 #endif /* _LIBC or not __GNU_LIBRARY__. */
84 
85 #ifdef TEST
86 
87 #include <stdio.h>
88 
89 int
90 main (argc, argv)
91  int argc;
92  char **argv;
93 {
94  int c;
95  int digit_optind = 0;
96 
97  while (1)
98  {
99  int this_option_optind = optind ? optind : 1;
100  int option_index = 0;
101  static struct option long_options[] =
102  {
103  {"add", 1, 0, 0},
104  {"append", 0, 0, 0},
105  {"delete", 1, 0, 0},
106  {"verbose", 0, 0, 0},
107  {"create", 0, 0, 0},
108  {"file", 1, 0, 0},
109  {0, 0, 0, 0}
110  };
111 
112  c = getopt_long (argc, argv, "abc:d:0123456789",
113  long_options, &option_index);
114  if (c == EOF)
115  break;
116 
117  switch (c)
118  {
119  case 0:
120  printf ("option %s", long_options[option_index].name);
121  if (optarg)
122  printf (" with arg %s", optarg);
123  printf ("\n");
124  break;
125 
126  case '0':
127  case '1':
128  case '2':
129  case '3':
130  case '4':
131  case '5':
132  case '6':
133  case '7':
134  case '8':
135  case '9':
136  if (digit_optind != 0 && digit_optind != this_option_optind)
137  printf ("digits occur in two different argv-elements.\n");
138  digit_optind = this_option_optind;
139  printf ("option %c\n", c);
140  break;
141 
142  case 'a':
143  printf ("option a\n");
144  break;
145 
146  case 'b':
147  printf ("option b\n");
148  break;
149 
150  case 'c':
151  printf ("option c with value `%s'\n", optarg);
152  break;
153 
154  case 'd':
155  printf ("option d with value `%s'\n", optarg);
156  break;
157 
158  case '?':
159  break;
160 
161  default:
162  printf ("?? getopt returned character code 0%o ??\n", c);
163  }
164  }
165 
166  if (optind < argc)
167  {
168  printf ("non-option ARGV-elements: ");
169  while (optind < argc)
170  printf ("%s ", argv[optind++]);
171  printf ("\n");
172  }
173 
174  exit (0);
175 }
176 
177 #endif /* TEST */
name
char * name
Definition: gntbindable.c:47
optarg
char * optarg
Definition: getopt.c:111
options
const struct options * options
Definition: themeedit-icon.c:96
getenv
char * getenv()
main
int main(int argc, char *argv[])
Definition: finch.c:441
optind
int optind
Definition: getopt.c:126
options
Definition: themeedit-icon.c:59
getopt_long
int getopt_long(int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index)
Definition: getopt1.c:56
option
Definition: getopt.h:84
config.h
_getopt_internal
int _getopt_internal(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, int long_only)
Definition: getopt.c:320
getopt_long_only
int getopt_long_only(int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index)
Definition: getopt1.c:72
getopt.h