summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorunknown <jani@ua141d10.elisa.omakaista.fi>2005-10-06 22:09:15 +0300
committerunknown <jani@ua141d10.elisa.omakaista.fi>2005-10-06 22:09:15 +0300
commit598d6422855b1c0352be1a76c589b4be21e791fa (patch)
treed9b0923b1057cc2b3333f6ad611ef198ccc3cf39 /mysys
parent3c2dca475dfa91c95f2488831fafacacaf852347 (diff)
downloadmariadb-git-598d6422855b1c0352be1a76c589b4be21e791fa.tar.gz
Fixed a bug in argument sending to get_one_option.
Fixed documentation for findopt(). Cleaned code a bit.
Diffstat (limited to 'mysys')
-rw-r--r--mysys/my_getopt.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c
index e9e20fe4024..31ef21632b9 100644
--- a/mysys/my_getopt.c
+++ b/mysys/my_getopt.c
@@ -358,7 +358,8 @@ invalid value '%s'\n",
continue;
}
get_one_option(optp->id, optp,
- value ? (char*) "1" : disabled_my_option);
+ *((my_bool*) value) ?
+ (char*) "1" : disabled_my_option);
continue;
}
argument= optend;
@@ -599,16 +600,27 @@ static int setval(const struct my_option *opts, gptr *value, char *argument,
return 0;
}
-/*
- function: findopt
- Arguments: opt_pattern, length of opt_pattern, opt_struct, first found
- name (ffname)
+/*
+ Find option
- Go through all options in the my_option struct. Return number
- of options found that match the pattern and in the argument
- list the option found, if any. In case of ambiguous option, store
- the name in ffname argument
+ SYNOPSIS
+ findopt()
+ optpat Prefix of option to find (with - or _)
+ length Length of optpat
+ opt_res Options
+ ffname Place for pointer to first found name
+
+ IMPLEMENTATION
+ Go through all options in the my_option struct. Return number
+ of options found that match the pattern and in the argument
+ list the option found, if any. In case of ambiguous option, store
+ the name in ffname argument
+
+ RETURN
+ 0 No matching options
+ # Number of matching options
+ ffname points to first matching option
*/
static int findopt(char *optpat, uint length,
@@ -623,12 +635,21 @@ static int findopt(char *optpat, uint length,
if (!getopt_compare_strings(opt->name, optpat, length)) /* match found */
{
(*opt_res)= opt;
- if (!count)
- *ffname= (char *) opt->name; /* We only need to know one prev */
if (!opt->name[length]) /* Exact match */
return 1;
- if (!count || strcmp(*ffname, opt->name)) /* Don't count synonyms */
+ if (!count)
+ {
+ count= 1;
+ *ffname= (char *) opt->name; /* We only need to know one prev */
+ }
+ else if (strcmp(*ffname, opt->name))
+ {
+ /*
+ The above test is to not count same option twice
+ (see mysql.cc, option "help")
+ */
count++;
+ }
}
}
return count;