diff options
author | unknown <jani@rhols221.adsl.netsonic.fi> | 2002-06-09 23:27:07 +0300 |
---|---|---|
committer | unknown <jani@rhols221.adsl.netsonic.fi> | 2002-06-09 23:27:07 +0300 |
commit | 5de96e3bac7751e1160751f8d8c743df8f58d7dc (patch) | |
tree | 8997c6282b737a7150b72a1f90f30d0723fb54ee /mysys/my_getopt.c | |
parent | 3a395a994a3d1f5d38e16e7b4781297692114cfc (diff) | |
download | mariadb-git-5de96e3bac7751e1160751f8d8c743df8f58d7dc.tar.gz |
Some enhancements in my_getopt. Made code more readable and better
optimized in some places.
Diffstat (limited to 'mysys/my_getopt.c')
-rw-r--r-- | mysys/my_getopt.c | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c index 12af811a0c8..94614ccb612 100644 --- a/mysys/my_getopt.c +++ b/mysys/my_getopt.c @@ -34,18 +34,24 @@ static void init_variables(const struct my_option *options); static int setval (const struct my_option *opts, char *argument, my_bool set_maximum_value); -#define DISABLE_OPTION_COUNT 2 /* currently 'skip' and 'disable' below */ - -/* 'disable'-option prefixes must be in the beginning, DISABLE_OPTION_COUNT - is the number of disabling prefixes */ +/* + The following three variables belong to same group and the number and + order of their arguments must correspond to each other. +*/ static const char *special_opt_prefix[]= {"skip", "disable", "enable", "maximum", "loose", 0}; +static const uint special_opt_prefix_lengths[]= +{ 4, 7, 6, 7, 5, 0}; +enum enum_special_opt { OPT_SKIP, OPT_DISABLE, OPT_ENABLE, OPT_MAXIMUM, + OPT_LOOSE}; char *disabled_my_option= (char*) "0"; -/* This is a flag that can be set in client programs. 0 means that +/* + This is a flag that can be set in client programs. 0 means that my_getopt will not print error messages, but the client should do - it by itself */ + it by itself +*/ my_bool my_getopt_print_errors= 1; @@ -66,7 +72,7 @@ int handle_options(int *argc, char ***argv, const struct my_option *, char *)) { - uint opt_found, argvpos= 0, length, spec_len, i; + uint opt_found, argvpos= 0, length, i; my_bool end_of_options= 0, must_be_var, set_maximum_value, special_used, option_is_loose, option_used= 0; char *progname= *(*argv), **pos, *optend, *prev_found; @@ -111,15 +117,9 @@ int handle_options(int *argc, char ***argv, (*argc)--; } } - else if (!compare_strings(cur_arg, "-set-variable", 13) || - !compare_strings(cur_arg, "-loose-set-variable", 19)) + else if (!compare_strings(cur_arg, "-set-variable", 13)) { must_be_var= 1; - if (cur_arg[1] == 'l') - { - option_is_loose= 1; - cur_arg+= 6; - } if (cur_arg[13] == '=') { cur_arg+= 14; @@ -183,18 +183,19 @@ int handle_options(int *argc, char ***argv, must_be_var= 1; /* option is followed by an argument */ for (i= 0; special_opt_prefix[i]; i++) { - spec_len= strlen(special_opt_prefix[i]); - if (!compare_strings(special_opt_prefix[i], cur_arg, spec_len) && - cur_arg[spec_len] == '-') + if (!compare_strings(special_opt_prefix[i], cur_arg, + special_opt_prefix_lengths[i]) && + cur_arg[special_opt_prefix_lengths[i]] == '-') { /* We were called with a special prefix, we can reuse opt_found */ special_used= 1; - cur_arg+= (spec_len + 1); - if (!compare_strings(special_opt_prefix[i], "loose", 5)) + cur_arg+= (special_opt_prefix_lengths[i] + 1); + if (i == OPT_LOOSE) option_is_loose= 1; - if ((opt_found= findopt(cur_arg, length - (spec_len + 1), + if ((opt_found= findopt(cur_arg, length - + (special_opt_prefix_lengths[i] + 1), &optp, &prev_found))) { if (opt_found > 1) @@ -206,14 +207,18 @@ int handle_options(int *argc, char ***argv, special_opt_prefix[i], prev_found); return EXIT_AMBIGUOUS_OPTION; } - if (i < DISABLE_OPTION_COUNT) + switch (i) { + case OPT_SKIP: + case OPT_DISABLE: /* fall through */ optend= disabled_my_option; - else if (!compare_strings(special_opt_prefix[i],"enable",6)) + break; + case OPT_ENABLE: optend= (char*) "1"; - else if (!compare_strings(special_opt_prefix[i],"maximum",7)) - { + break; + case OPT_MAXIMUM: set_maximum_value= 1; must_be_var= 1; + break; } break; /* break from the inner loop, main loop continues */ } |