diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-29 08:23:42 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-29 08:23:42 +0000 |
commit | b02ef82c99819607df32d3261cef1d674d67893a (patch) | |
tree | ed501f4001514318d7e9d2d3928cbbd8bed983cb | |
parent | 6248a734e2d59ebe95aeb39189326d90f018804e (diff) | |
download | busybox-w32-b02ef82c99819607df32d3261cef1d674d67893a.tar.gz busybox-w32-b02ef82c99819607df32d3261cef1d674d67893a.tar.bz2 busybox-w32-b02ef82c99819607df32d3261cef1d674d67893a.zip |
getopt_ulflags: formatting fixes
-rw-r--r-- | libbb/getopt_ulflags.c | 142 |
1 files changed, 71 insertions, 71 deletions
diff --git a/libbb/getopt_ulflags.c b/libbb/getopt_ulflags.c index edc6a78bb..7ad26551a 100644 --- a/libbb/getopt_ulflags.c +++ b/libbb/getopt_ulflags.c | |||
@@ -13,7 +13,7 @@ | |||
13 | /* Documentation | 13 | /* Documentation |
14 | 14 | ||
15 | unsigned long | 15 | unsigned long |
16 | bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | 16 | bb_getopt_ulflags(int argc, char **argv, const char *applet_opts, ...) |
17 | 17 | ||
18 | The command line options must be declared in const char | 18 | The command line options must be declared in const char |
19 | *applet_opts as a string of chars, for example: | 19 | *applet_opts as a string of chars, for example: |
@@ -74,6 +74,7 @@ const struct option *bb_applet_long_options | |||
74 | (see getopt(3)) | 74 | (see getopt(3)) |
75 | 75 | ||
76 | static const struct option applet_long_options[] = { | 76 | static const struct option applet_long_options[] = { |
77 | //name,has_arg,flag,val | ||
77 | { "verbose", 0, 0, 'v' }, | 78 | { "verbose", 0, 0, 'v' }, |
78 | { 0, 0, 0, 0 } | 79 | { 0, 0, 0, 0 } |
79 | }; | 80 | }; |
@@ -120,7 +121,7 @@ const char *bb_opt_complementally | |||
120 | int w_counter = 0; | 121 | int w_counter = 0; |
121 | bb_opt_complementally = "ww"; | 122 | bb_opt_complementally = "ww"; |
122 | bb_getopt_ulflags(argc, argv, "w", &w_counter); | 123 | bb_getopt_ulflags(argc, argv, "w", &w_counter); |
123 | if(w_counter) | 124 | if (w_counter) |
124 | width = (w_counter == 1) ? 132 : INT_MAX; | 125 | width = (w_counter == 1) ? 132 : INT_MAX; |
125 | else | 126 | else |
126 | get_terminal_width(...&width...); | 127 | get_terminal_width(...&width...); |
@@ -136,11 +137,11 @@ const char *bb_opt_complementally | |||
136 | int verbose_level = 0; | 137 | int verbose_level = 0; |
137 | bb_opt_complementally = "vv:b::b-c:c-b"; | 138 | bb_opt_complementally = "vv:b::b-c:c-b"; |
138 | f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level); | 139 | f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level); |
139 | if(f & 2) // -c after -b unsets -b flag | 140 | if (f & 2) // -c after -b unsets -b flag |
140 | while(my_b) { dosomething_with(my_b->data); my_b = my_b->link; } | 141 | while (my_b) { dosomething_with(my_b->data); my_b = my_b->link; } |
141 | if(my_b) // but llist is stored if -b is specified | 142 | if (my_b) // but llist is stored if -b is specified |
142 | free_llist(my_b); | 143 | free_llist(my_b); |
143 | if(verbose_level) bb_printf("verbose level is %d\n", verbose_level); | 144 | if (verbose_level) bb_printf("verbose level is %d\n", verbose_level); |
144 | 145 | ||
145 | Special characters: | 146 | Special characters: |
146 | 147 | ||
@@ -207,6 +208,9 @@ Special characters: | |||
207 | if (flags & BB_GETOPT_ERROR) | 208 | if (flags & BB_GETOPT_ERROR) |
208 | bb_show_usage(); | 209 | bb_show_usage(); |
209 | 210 | ||
211 | "x--x" Variation of the above, it means that -x option should occur | ||
212 | at most once. | ||
213 | |||
210 | "?" A "?" as the first char in a bb_opt_complementally group means: | 214 | "?" A "?" as the first char in a bb_opt_complementally group means: |
211 | if BB_GETOPT_ERROR is detected, don't return, call bb_show_usage | 215 | if BB_GETOPT_ERROR is detected, don't return, call bb_show_usage |
212 | and exit instead. Next char after '?' can't be a digit. | 216 | and exit instead. Next char after '?' can't be a digit. |
@@ -255,7 +259,7 @@ Special characters: | |||
255 | $ id; id -u; id -g; id -ru; id -nu; id -rg; id -ng; id -rnu; id -rng | 259 | $ id; id -u; id -g; id -ru; id -nu; id -rg; id -ng; id -rnu; id -rng |
256 | 260 | ||
257 | "X" A bb_opt_complementally group with just a single letter means | 261 | "X" A bb_opt_complementally group with just a single letter means |
258 | that this this option is required. If more than one such group exists, | 262 | that this option is required. If more than one such group exists, |
259 | at least one option is required to occur (not all of them). | 263 | at least one option is required to occur (not all of them). |
260 | For example from "start-stop-daemon" applet: | 264 | For example from "start-stop-daemon" applet: |
261 | 265 | ||
@@ -263,9 +267,6 @@ Special characters: | |||
263 | bb_opt_complementally = "K:S:?K--S:S--K"; | 267 | bb_opt_complementally = "K:S:?K--S:S--K"; |
264 | flags = bb_getopt_ulflags(argc, argv, "KS...); | 268 | flags = bb_getopt_ulflags(argc, argv, "KS...); |
265 | 269 | ||
266 | |||
267 | "x--x" give error if double or more used -x option | ||
268 | |||
269 | Don't forget to use ':'. For example "?322-22-23X-x-a" is interpreted as | 270 | Don't forget to use ':'. For example "?322-22-23X-x-a" is interpreted as |
270 | "?3:22:-2:2-2:2-3Xa:2--x": max 3 args; count uses of '-2'; min 2 args; | 271 | "?3:22:-2:2-2:2-3Xa:2--x": max 3 args; count uses of '-2'; min 2 args; |
271 | if there is a '-2' option then unset '-3', '-X' and '-a'; if there is | 272 | if there is a '-2' option then unset '-3', '-X' and '-a'; if there is |
@@ -299,7 +300,7 @@ const struct option *bb_applet_long_options = bb_default_long_options; | |||
299 | #endif | 300 | #endif |
300 | 301 | ||
301 | unsigned long | 302 | unsigned long |
302 | bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | 303 | bb_getopt_ulflags(int argc, char **argv, const char *applet_opts, ...) |
303 | { | 304 | { |
304 | unsigned long flags = 0; | 305 | unsigned long flags = 0; |
305 | unsigned long requires = 0; | 306 | unsigned long requires = 0; |
@@ -324,7 +325,7 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | |||
324 | #define FREE_FIRST_ARGV_IS_OPT 8 | 325 | #define FREE_FIRST_ARGV_IS_OPT 8 |
325 | int spec_flgs = 0; | 326 | int spec_flgs = 0; |
326 | 327 | ||
327 | va_start (p, applet_opts); | 328 | va_start(p, applet_opts); |
328 | 329 | ||
329 | c = 0; | 330 | c = 0; |
330 | on_off = complementally; | 331 | on_off = complementally; |
@@ -332,15 +333,15 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | |||
332 | 333 | ||
333 | /* skip GNU extension */ | 334 | /* skip GNU extension */ |
334 | s = (const unsigned char *)applet_opts; | 335 | s = (const unsigned char *)applet_opts; |
335 | if(*s == '+' || *s == '-') | 336 | if (*s == '+' || *s == '-') |
336 | s++; | 337 | s++; |
337 | for (; *s; s++) { | 338 | for (; *s; s++) { |
338 | if(c >= (int)(sizeof(flags)*8)) | 339 | if (c >= (int)(sizeof(flags)*8)) |
339 | break; | 340 | break; |
340 | on_off->opt = *s; | 341 | on_off->opt = *s; |
341 | on_off->switch_on = (1 << c); | 342 | on_off->switch_on = (1 << c); |
342 | if (s[1] == ':') { | 343 | if (s[1] == ':') { |
343 | on_off->optarg = va_arg (p, void **); | 344 | on_off->optarg = va_arg(p, void **); |
344 | do | 345 | do |
345 | s++; | 346 | s++; |
346 | while (s[1] == ':'); | 347 | while (s[1] == ':'); |
@@ -350,19 +351,19 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | |||
350 | } | 351 | } |
351 | 352 | ||
352 | #if ENABLE_GETOPT_LONG | 353 | #if ENABLE_GETOPT_LONG |
353 | for(l_o = bb_applet_long_options; l_o->name; l_o++) { | 354 | for (l_o = bb_applet_long_options; l_o->name; l_o++) { |
354 | if(l_o->flag) | 355 | if (l_o->flag) |
355 | continue; | 356 | continue; |
356 | for(on_off = complementally; on_off->opt != 0; on_off++) | 357 | for (on_off = complementally; on_off->opt != 0; on_off++) |
357 | if(on_off->opt == l_o->val) | 358 | if (on_off->opt == l_o->val) |
358 | break; | 359 | break; |
359 | if(on_off->opt == 0) { | 360 | if (on_off->opt == 0) { |
360 | if(c >= (int)(sizeof(flags)*8)) | 361 | if (c >= (int)(sizeof(flags)*8)) |
361 | break; | 362 | break; |
362 | on_off->opt = l_o->val; | 363 | on_off->opt = l_o->val; |
363 | on_off->switch_on = (1 << c); | 364 | on_off->switch_on = (1 << c); |
364 | if(l_o->has_arg != no_argument) | 365 | if (l_o->has_arg != no_argument) |
365 | on_off->optarg = va_arg (p, void **); | 366 | on_off->optarg = va_arg(p, void **); |
366 | c++; | 367 | c++; |
367 | } | 368 | } |
368 | } | 369 | } |
@@ -374,8 +375,8 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | |||
374 | if (*s == ':') | 375 | if (*s == ':') |
375 | continue; | 376 | continue; |
376 | c = s[1]; | 377 | c = s[1]; |
377 | if(*s == '?') { | 378 | if (*s == '?') { |
378 | if(c < '0' || c > '9') { | 379 | if (c < '0' || c > '9') { |
379 | spec_flgs |= SHOW_USAGE_IF_ERROR; | 380 | spec_flgs |= SHOW_USAGE_IF_ERROR; |
380 | } else { | 381 | } else { |
381 | max_arg = c - '0'; | 382 | max_arg = c - '0'; |
@@ -383,9 +384,9 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | |||
383 | } | 384 | } |
384 | continue; | 385 | continue; |
385 | } | 386 | } |
386 | if(*s == '-') { | 387 | if (*s == '-') { |
387 | if(c < '0' || c > '9') { | 388 | if (c < '0' || c > '9') { |
388 | if(c == '-') { | 389 | if (c == '-') { |
389 | spec_flgs |= FIRST_ARGV_IS_OPT; | 390 | spec_flgs |= FIRST_ARGV_IS_OPT; |
390 | s++; | 391 | s++; |
391 | } else | 392 | } else |
@@ -399,99 +400,99 @@ bb_getopt_ulflags (int argc, char **argv, const char *applet_opts, ...) | |||
399 | for (on_off = complementally; on_off->opt; on_off++) | 400 | for (on_off = complementally; on_off->opt; on_off++) |
400 | if (on_off->opt == *s) | 401 | if (on_off->opt == *s) |
401 | break; | 402 | break; |
402 | if(c == ':' && s[2] == ':') { | 403 | if (c == ':' && s[2] == ':') { |
403 | on_off->list_flg++; | 404 | on_off->list_flg++; |
404 | continue; | 405 | continue; |
405 | } | 406 | } |
406 | if(c == ':' || c == '\0') { | 407 | if (c == ':' || c == '\0') { |
407 | requires |= on_off->switch_on; | 408 | requires |= on_off->switch_on; |
408 | continue; | 409 | continue; |
409 | } | 410 | } |
410 | if(c == '-' && (s[2] == ':' || s[2] == '\0')) { | 411 | if (c == '-' && (s[2] == ':' || s[2] == '\0')) { |
411 | flags |= on_off->switch_on; | 412 | flags |= on_off->switch_on; |
412 | on_off->incongruously |= on_off->switch_on; | 413 | on_off->incongruously |= on_off->switch_on; |
413 | s++; | 414 | s++; |
414 | continue; | 415 | continue; |
415 | } | 416 | } |
416 | if(c == *s) { | 417 | if (c == *s) { |
417 | on_off->counter = va_arg (p, int *); | 418 | on_off->counter = va_arg(p, int *); |
418 | s++; | 419 | s++; |
419 | } | 420 | } |
420 | pair = on_off; | 421 | pair = on_off; |
421 | pair_switch = &(pair->switch_on); | 422 | pair_switch = &(pair->switch_on); |
422 | for(s++; *s && *s != ':'; s++) { | 423 | for (s++; *s && *s != ':'; s++) { |
423 | if(*s == '?') { | 424 | if (*s == '?') { |
424 | pair_switch = &(pair->requires); | 425 | pair_switch = &(pair->requires); |
425 | } else if (*s == '-') { | 426 | } else if (*s == '-') { |
426 | if(pair_switch == &(pair->switch_off)) | 427 | if (pair_switch == &(pair->switch_off)) |
427 | pair_switch = &(pair->incongruously); | 428 | pair_switch = &(pair->incongruously); |
428 | else | 429 | else |
429 | pair_switch = &(pair->switch_off); | 430 | pair_switch = &(pair->switch_off); |
430 | } else { | 431 | } else { |
431 | for (on_off = complementally; on_off->opt; on_off++) | 432 | for (on_off = complementally; on_off->opt; on_off++) |
432 | if (on_off->opt == *s) { | 433 | if (on_off->opt == *s) { |
433 | *pair_switch |= on_off->switch_on; | 434 | *pair_switch |= on_off->switch_on; |
434 | break; | 435 | break; |
435 | } | 436 | } |
436 | } | 437 | } |
437 | } | 438 | } |
438 | s--; | 439 | s--; |
439 | } | 440 | } |
440 | va_end (p); | 441 | va_end (p); |
441 | 442 | ||
442 | #if defined(CONFIG_AR) || defined(CONFIG_TAR) | 443 | #if ENABLE_AR || ENABLE_TAR |
443 | if((spec_flgs & FIRST_ARGV_IS_OPT)) { | 444 | if (spec_flgs & FIRST_ARGV_IS_OPT) { |
444 | if(argv[1] && argv[1][0] != '-' && argv[1][0] != '\0') { | 445 | if (argv[1] && argv[1][0] != '-' && argv[1][0] != '\0') { |
445 | argv[1] = xasprintf("-%s", argv[1]); | 446 | argv[1] = xasprintf("-%s", argv[1]); |
446 | if(ENABLE_FEATURE_CLEAN_UP) | 447 | if (ENABLE_FEATURE_CLEAN_UP) |
447 | spec_flgs |= FREE_FIRST_ARGV_IS_OPT; | 448 | spec_flgs |= FREE_FIRST_ARGV_IS_OPT; |
448 | } | 449 | } |
449 | } | 450 | } |
450 | #endif | 451 | #endif |
451 | #if ENABLE_GETOPT_LONG | 452 | #if ENABLE_GETOPT_LONG |
452 | while ((c = getopt_long (argc, argv, applet_opts, | 453 | while ((c = getopt_long(argc, argv, applet_opts, |
453 | bb_applet_long_options, NULL)) >= 0) { | 454 | bb_applet_long_options, NULL)) >= 0) { |
454 | #else | 455 | #else |
455 | while ((c = getopt (argc, argv, applet_opts)) >= 0) { | 456 | while ((c = getopt(argc, argv, applet_opts)) >= 0) { |
456 | #endif /* ENABLE_GETOPT_LONG */ | 457 | #endif /* ENABLE_GETOPT_LONG */ |
457 | #ifdef CONFIG_PS | 458 | #if ENABLE_PS |
458 | loop_arg_is_opt: | 459 | loop_arg_is_opt: |
459 | #endif | 460 | #endif |
460 | for (on_off = complementally; on_off->opt != c; on_off++) { | 461 | for (on_off = complementally; on_off->opt != c; on_off++) { |
461 | /* c==0 if long opt have non NULL flag */ | 462 | /* c==0 if long opt have non NULL flag */ |
462 | if(on_off->opt == 0 && c != 0) | 463 | if (on_off->opt == 0 && c != 0) |
463 | bb_show_usage (); | 464 | bb_show_usage(); |
464 | } | 465 | } |
465 | if(flags & on_off->incongruously) { | 466 | if (flags & on_off->incongruously) { |
466 | if((spec_flgs & SHOW_USAGE_IF_ERROR)) | 467 | if ((spec_flgs & SHOW_USAGE_IF_ERROR)) |
467 | bb_show_usage (); | 468 | bb_show_usage(); |
468 | flags |= BB_GETOPT_ERROR; | 469 | flags |= BB_GETOPT_ERROR; |
469 | } | 470 | } |
470 | trigger = on_off->switch_on & on_off->switch_off; | 471 | trigger = on_off->switch_on & on_off->switch_off; |
471 | flags &= ~(on_off->switch_off ^ trigger); | 472 | flags &= ~(on_off->switch_off ^ trigger); |
472 | flags |= on_off->switch_on ^ trigger; | 473 | flags |= on_off->switch_on ^ trigger; |
473 | flags ^= trigger; | 474 | flags ^= trigger; |
474 | if(on_off->counter) | 475 | if (on_off->counter) |
475 | (*(on_off->counter))++; | 476 | (*(on_off->counter))++; |
476 | if(on_off->list_flg) { | 477 | if (on_off->list_flg) { |
477 | llist_add_to((llist_t **)(on_off->optarg), optarg); | 478 | llist_add_to((llist_t **)(on_off->optarg), optarg); |
478 | } else if (on_off->optarg) { | 479 | } else if (on_off->optarg) { |
479 | *(char **)(on_off->optarg) = optarg; | 480 | *(char **)(on_off->optarg) = optarg; |
480 | } | 481 | } |
481 | #ifdef CONFIG_PS | 482 | #if ENABLE_PS |
482 | if(pargv != NULL) | 483 | if (pargv != NULL) |
483 | break; | 484 | break; |
484 | #endif | 485 | #endif |
485 | } | 486 | } |
486 | 487 | ||
487 | #ifdef CONFIG_PS | 488 | #if ENABLE_PS |
488 | if((spec_flgs & ALL_ARGV_IS_OPTS)) { | 489 | if (spec_flgs & ALL_ARGV_IS_OPTS) { |
489 | /* process argv is option, for example "ps" applet */ | 490 | /* process argv is option, for example "ps" applet */ |
490 | if(pargv == NULL) | 491 | if (pargv == NULL) |
491 | pargv = argv + optind; | 492 | pargv = argv + optind; |
492 | while(*pargv) { | 493 | while (*pargv) { |
493 | c = **pargv; | 494 | c = **pargv; |
494 | if(c == '\0') { | 495 | if (c == '\0') { |
495 | pargv++; | 496 | pargv++; |
496 | } else { | 497 | } else { |
497 | (*pargv)++; | 498 | (*pargv)++; |
@@ -501,21 +502,20 @@ loop_arg_is_opt: | |||
501 | } | 502 | } |
502 | #endif | 503 | #endif |
503 | 504 | ||
504 | #if (defined(CONFIG_AR) || defined(CONFIG_TAR)) && \ | 505 | #if (ENABLE_AR || ENABLE_TAR) && ENABLE_FEATURE_CLEAN_UP |
505 | defined(CONFIG_FEATURE_CLEAN_UP) | 506 | if (spec_flgs & FREE_FIRST_ARGV_IS_OPT) |
506 | if((spec_flgs & FREE_FIRST_ARGV_IS_OPT)) | ||
507 | free(argv[1]); | 507 | free(argv[1]); |
508 | #endif | 508 | #endif |
509 | /* check depending requires for given options */ | 509 | /* check depending requires for given options */ |
510 | for (on_off = complementally; on_off->opt; on_off++) { | 510 | for (on_off = complementally; on_off->opt; on_off++) { |
511 | if(on_off->requires && (flags & on_off->switch_on) && | 511 | if (on_off->requires && (flags & on_off->switch_on) && |
512 | (flags & on_off->requires) == 0) | 512 | (flags & on_off->requires) == 0) |
513 | bb_show_usage (); | 513 | bb_show_usage(); |
514 | } | 514 | } |
515 | if(requires && (flags & requires) == 0) | 515 | if (requires && (flags & requires) == 0) |
516 | bb_show_usage (); | 516 | bb_show_usage(); |
517 | argc -= optind; | 517 | argc -= optind; |
518 | if(argc < min_arg || (max_arg >= 0 && argc > max_arg)) | 518 | if (argc < min_arg || (max_arg >= 0 && argc > max_arg)) |
519 | bb_show_usage (); | 519 | bb_show_usage(); |
520 | return flags; | 520 | return flags; |
521 | } | 521 | } |