From d690da668ee7b46d50afc28dd8076682523ecfa4 Mon Sep 17 00:00:00 2001 From: Magne Mahre Date: Mon, 10 Jan 2011 15:18:20 +0100 Subject: Bug#51631 general-log flag doesn't accept "on" as a value in the my.cnf, works as command Different parsing mechanisms are used for command line/my.cnf options and the SQL commands. The former only accepted numeric arguments, and regarded all numbers different from 0 as 'true'. Any other argument was parsed as 'false' . This patch adds the words 'true' and 'on' as valid truth values for boolean option arguments. A test case is not provided, as the fix is simple and does not warrant a separate test file (no existing suitable test file was found) (backported from mysql-trunk) --- mysys/my_getopt.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'mysys/my_getopt.c') diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c index 5e66d2fc189..51c45ff1309 100644 --- a/mysys/my_getopt.c +++ b/mysys/my_getopt.c @@ -602,6 +602,24 @@ static char *check_struct_option(char *cur_arg, char *key_name) } } +/** + Parse a boolean command line argument + + "ON", "TRUE" and "1" will return true, + other values will return false. + + @param[in] argument The value argument + @return boolean value +*/ +static my_bool get_bool_argument(const char *argument) +{ + if (!my_strcasecmp(&my_charset_latin1, argument, "true") || + !my_strcasecmp(&my_charset_latin1, argument, "on")) + return 1; + else + return (my_bool) atoi(argument); +} + /* function: setval @@ -629,7 +647,7 @@ static int setval(const struct my_option *opts, void *value, char *argument, switch ((opts->var_type & GET_TYPE_MASK)) { case GET_BOOL: /* If argument differs from 0, enable option, else disable */ - *((my_bool*) value)= (my_bool) atoi(argument) != 0; + *((my_bool*) value)= get_bool_argument(argument); break; case GET_INT: *((int*) value)= (int) getopt_ll(argument, opts, &err); -- cgit v1.2.1