Mercurial > pidgin
annotate finch/getopt1.c @ 16807:f7466b0379e8
This is ugly and probably not a "correct" fix, but it seems to fix
the "could not add buddy 1" problem for Kevin's account. Kevin,
I'm done fiddling with your ICQ account now, thanks immensely for
letting me use it!
To anyone: Let me know if you see the problem again after this
checkin.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 03 May 2007 08:34:53 +0000 |
parents | 66dff3dfdea6 |
children | a8cc50c2279f |
rev | line source |
---|---|
15817 | 1 /* getopt_long and getopt_long_only entry points for GNU getopt. |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15822
diff
changeset
|
2 Finch is the legal property of its developers, whose names are too numerous |
15817 | 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 */ |