aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorlandley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-05-03 21:23:15 +0000
committerlandley <landley@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-05-03 21:23:15 +0000
commit835250c1beecd89d2942a6c1c4a1afe4f345b59f (patch)
treebd2a6678c9fcda7b8fc20f2b950d57a76aa71607 /libbb
parentde055e602d4d095eddd202e876d3da246adb6919 (diff)
downloadbusybox-w32-835250c1beecd89d2942a6c1c4a1afe4f345b59f.tar.gz
busybox-w32-835250c1beecd89d2942a6c1c4a1afe4f345b59f.tar.bz2
busybox-w32-835250c1beecd89d2942a6c1c4a1afe4f345b59f.zip
Whitespace and documentation cleanup from Dennis Vlasenko.
git-svn-id: svn://busybox.net/trunk/busybox@14987 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'libbb')
-rw-r--r--libbb/getopt_ulflags.c113
1 files changed, 60 insertions, 53 deletions
diff --git a/libbb/getopt_ulflags.c b/libbb/getopt_ulflags.c
index 199147b76..76bdeed75 100644
--- a/libbb/getopt_ulflags.c
+++ b/libbb/getopt_ulflags.c
@@ -26,7 +26,7 @@
26#include <stdlib.h> 26#include <stdlib.h>
27#include "libbb.h" 27#include "libbb.h"
28 28
29/* Documentation ! 29/* Documentation
30 30
31unsigned long 31unsigned long
32bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) 32bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...)
@@ -44,13 +44,13 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...)
44 44
45 flags = bb_getopt_ulflags(argc, argv, "rnug"); 45 flags = bb_getopt_ulflags(argc, argv, "rnug");
46 46
47 "r" will add 1 (bit 1 : 0x01) 47 "r" will add 1 (bit 0)
48 "n" will add 2 (bit 2 : 0x02) 48 "n" will add 2 (bit 1)
49 "u will add 4 (bit 3 : 0x03) 49 "u will add 4 (bit 2)
50 "g" will add 8 (bit 4 : 0x04) 50 "g" will add 8 (bit 3)
51 51
52 and so on. You can also look at the return value as a bit 52 and so on. You can also look at the return value as a bit
53 field and each option sets one of bits. 53 field and each option sets one bit.
54 54
55 ":" If one of the options requires an argument, then add a ":" 55 ":" If one of the options requires an argument, then add a ":"
56 after the char in applet_opts and provide a pointer to store 56 after the char in applet_opts and provide a pointer to store
@@ -62,10 +62,10 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...)
62 char *pointer_to_arg_for_d; 62 char *pointer_to_arg_for_d;
63 63
64 flags = bb_getopt_ulflags(argc, argv, "a:b:c:d:", 64 flags = bb_getopt_ulflags(argc, argv, "a:b:c:d:",
65 &pointer_to_arg_for_a, &pointer_to_arg_for_b, 65 &pointer_to_arg_for_a, &pointer_to_arg_for_b,
66 &pointer_to_arg_for_c, &pointer_to_arg_for_d); 66 &pointer_to_arg_for_c, &pointer_to_arg_for_d);
67 67
68 The type of the pointer (char* or llist_t *) may be controlled 68 The type of the pointer (char* or llist_t*) may be controlled
69 by the "::" special separator that is set in the external string 69 by the "::" special separator that is set in the external string
70 bb_opt_complementally (see below for more info). 70 bb_opt_complementally (see below for more info).
71 71
@@ -76,23 +76,24 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...)
76 env -i ls -d / 76 env -i ls -d /
77 Here we want env to process just the '-i', not the '-d'. 77 Here we want env to process just the '-i', not the '-d'.
78 78
79static const struct option bb_default_long_options[] 79const struct option *bb_applet_long_options
80 80
81 This struct allows you to define long options. The syntax for 81 This struct allows you to define long options. The syntax for
82 declaring the array is just like that of getopt's longopts. 82 declaring the array is just like that of getopt's longopts.
83 (see getopt(3)) 83 (see getopt(3))
84 84
85 static const struct option applet_long_options[] = { 85 static const struct option applet_long_options[] = {
86 { "verbose", 0, 0, v }, 86 { "verbose", 0, 0, 'v' },
87 { 0, 0, 0, 0 } 87 { 0, 0, 0, 0 }
88 }; 88 };
89 bb_applet_long_options = applet_long_options; 89 bb_applet_long_options = applet_long_options;
90 90
91 The last argument (val) can undefined from applet_opts. 91 The last member of struct option (val) typically is set to
92 If you use this, then: 92 matching short option from applet_opts. If there is no matching
93 char in applet_opts, then:
93 - return bit have next position after short options 94 - return bit have next position after short options
94 - if has_arg is not "no_argument", use ptr for arg also 95 - if has_arg is not "no_argument", use ptr for arg also
95 - bb_opt_complementally have effects for this too 96 - bb_opt_complementally affects it too
96 97
97 Note: a good applet will make long options configurable via the 98 Note: a good applet will make long options configurable via the
98 config process and not a required feature. The current standard 99 config process and not a required feature. The current standard
@@ -120,7 +121,7 @@ const char *bb_opt_complementally
120 found. 121 found.
121 122
122 "ww" Adjacent double options have a counter associated which indicates 123 "ww" Adjacent double options have a counter associated which indicates
123 the number of occurances of the option. 124 the number of occurences of the option.
124 For example the ps applet needs: 125 For example the ps applet needs:
125 if w is given once, GNU ps sets the width to 132, 126 if w is given once, GNU ps sets the width to 132,
126 if w is given more than once, it is "unlimited" 127 if w is given more than once, it is "unlimited"
@@ -144,17 +145,18 @@ const char *bb_opt_complementally
144 int verbose_level = 0; 145 int verbose_level = 0;
145 bb_opt_complementally = "vv:b::b-c:c-b"; 146 bb_opt_complementally = "vv:b::b-c:c-b";
146 f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level); 147 f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level);
147 if((f & 2)) // -c after -b unset this -b flag 148 if((f & 2)) // -c after -b unsets -b flag
148 while (my_b) { dosomething_with(my_b->data) ; my_b = my_b->link; } 149 while(my_b) { dosomething_with(my_b->data) ; my_b = my_b->link; }
149 if(my_b) // but llist stored always if -b found 150 if(my_b) // but llist is stored if -b is specified
150 free_llist(my_b); 151 free_llist(my_b);
151 if (verbose_level) bb_printf("verbose level is %d\n", verbose_level); 152 if(verbose_level) bb_printf("verbose level is %d\n", verbose_level);
152 153
153Special characters: 154Special characters:
154 155
155 "-" A dash between two options causes the second of the two 156 "-" A dash between two options causes the second of the two
156 to be unset (and ignored or triggered) if it is given on 157 to be unset (and ignored) if it is given on the command line.
157 the command line. 158
159 [FIXME: what if they are the same? like "x-x"? Is it ever useful?]
158 160
159 For example: 161 For example:
160 The du applet has the options "-s" and "-d depth". If 162 The du applet has the options "-s" and "-d depth". If
@@ -172,28 +174,30 @@ Special characters:
172 bb_opt_complementally = "s-d:d-s:x-x"; 174 bb_opt_complementally = "s-d:d-s:x-x";
173 opt = bb_getopt_ulflags(argc, argv, "sd:x", &smax_print_depth); 175 opt = bb_getopt_ulflags(argc, argv, "sd:x", &smax_print_depth);
174 176
175 if (opt & 2) { 177 if (opt & 2)
176 max_print_depth = atoi(smax_print_depth); 178 max_print_depth = atoi(smax_print_depth);
177 } 179 if (opt & 4)
178 if(opt & 4) 180 printf("Detected odd -x usage\n");
179 printf("Detected odd -x usaging\n");
180 181
181 "-" A dash as the first char in a bb_opt_complementally group means to 182 "-" A dash as the first char in a bb_opt_complementally group forces
182 convert the arguments as option. Next char for this case can't set 183 all arguments to be treated as options, even if they have
183 [0-9], recomended use ':' or end of line. For example: 184 no leading dashes. Next char in this case can't be a digit (0-9),
185 use ':' or end of line. For example:
184 186
185 bb_opt_complementally = "-:w-x:x-w"; 187 bb_opt_complementally = "-:w-x:x-w";
186 bb_getopt_ulflags(argc, argv, "wx"); 188 bb_getopt_ulflags(argc, argv, "wx");
187 189
188 Allows any arguments to be given without a dash (./program w x) 190 Allows any arguments to be given without a dash (./program w x)
189 as well as with a dash (./program -x). Why unset -w see above. 191 as well as with a dash (./program -x).
190 192
191 "-N" A dash as the first char in a bb_opt_complementally group with 193 "-N" A dash as the first char in a bb_opt_complementally group followed
192 number 0-9 as one char is means check minimal arguments required. 194 by a single digit (0-9) means that at least N non-option
195 arguments must be present on the command line
193 196
194 "V-" A option with dash before colon or end line indicate: call 197 "V-" An option with dash before colon or end-of-line results in
195 bb_show_usage if this option give, for example verbose 198 bb_show_usage being called if this option is encountered.
196 usage option. 199 This is typically used to implement "print verbose usage message
200 and exit" option.
197 201
198 "--" A double dash between two options, or between an option and a group 202 "--" A double dash between two options, or between an option and a group
199 of options, means that they are mutually exclusive. Unlike 203 of options, means that they are mutually exclusive. Unlike
@@ -212,16 +216,17 @@ Special characters:
212 if (flags & BB_GETOPT_ERROR) 216 if (flags & BB_GETOPT_ERROR)
213 bb_show_usage(); 217 bb_show_usage();
214 218
215 "?" A "ask" as the first char in a bb_opt_complementally group give: 219 "?" A "?" as the first char in a bb_opt_complementally group means:
216 if previous point set BB_GETOPT_ERROR, don't return and 220 if BB_GETOPT_ERROR is detected, don't return, call bb_show_usage
217 call previous example internally. Next char for this case can't 221 and exit instead. Next char after '?' can't be a digit.
218 set to [0-9], recomended use ':' or end of line.
219 222
220 "?N" A "ask" as the first char in a bb_opt_complementally group with 223 "?N" A "?" as the first char in a bb_opt_complementally group followed
221 number 0-9 as one char is means check maximal arguments possible. 224 by a single digit (0-9) means that at most N arguments must be present
225 on the command line.
222 226
223 "::" A double colon after a char in bb_opt_complementally means that the 227 "::" A double colon after a char in bb_opt_complementally means that the
224 option can occur multiple times: 228 option can occur multiple times. Each occurrence will be saved as
229 a llist_t element instead of char*.
225 230
226 For example: 231 For example:
227 The grep applet can have one or more "-e pattern" arguments. 232 The grep applet can have one or more "-e pattern" arguments.
@@ -245,8 +250,10 @@ Special characters:
245 such as "ar" and "tar": 250 such as "ar" and "tar":
246 tar xvf foo.tar 251 tar xvf foo.tar
247 252
248 "?" An "ask" between main and group options causes the second of the two 253 "?" An "?" between an option and a group of options means that
249 to be depending required as or if first is given on the command line. 254 at least one of them is required to occur if the first option
255 occurs in preceding command line arguments.
256
250 For example from "id" applet: 257 For example from "id" applet:
251 258
252 // Don't allow -n -r -rn -ug -rug -nug -rnug 259 // Don't allow -n -r -rn -ug -rug -nug -rnug
@@ -256,22 +263,22 @@ Special characters:
256 This example allowed only: 263 This example allowed only:
257 $ id; id -u; id -g; id -ru; id -nu; id -rg; id -ng; id -rnu; id -rng 264 $ id; id -u; id -g; id -ru; id -nu; id -rg; id -ng; id -rnu; id -rng
258 265
259 "X" A one options in bb_opt_complementally group means 266 "X" A bb_opt_complementally group with just a single letter means
260 requires this option always with "or" logic if more one specified, 267 that this this option is required. If more than one such group exists,
261 checked after switch off from complementally logic. 268 at least one option is required to occur (not all of them).
262 For example from "start-stop-daemon" applet: 269 For example from "start-stop-daemon" applet:
263 270
264 // Don't allow -KS -SK, but -S or -K required 271 // Don't allow -KS -SK, but -S or -K is required
265 bb_opt_complementally = "K:S:?K--S:S--K"; 272 bb_opt_complementally = "K:S:?K--S:S--K";
266 flags = bb_getopt_ulflags(argc, argv, "KS...); 273 flags = bb_getopt_ulflags(argc, argv, "KS...);
267 274
268 275
269 "x--x" give error if double or more used -x option 276 "x--x" give error if double or more used -x option
270 277
271 Don't forget ':' store. For example "?322-22-23X-x-a" interpretet as 278 Don't forget to use ':'. For example "?322-22-23X-x-a" is interpreted as
272 "?3:22:-2:2-2:2-3Xa:2--x": max args is 3, count -2 usaged, min args is 2, 279 "?3:22:-2:2-2:2-3Xa:2--x": max 3 args; count uses of '-2'; min 2 args;
273 -2 option triggered, unset -3 and -X and -a if -2 any usaged, give error if 280 if there is a '-2' option then unset '-3', '-X' and '-a'; if there is
274 after -2 the -x option usaged. 281 a '-2' and after it a '-x' then error out.
275 282
276*/ 283*/
277 284