Added find_type_or_exit and find_bit_type_or_exit as wrappers

around the original functions. These will ensure that error
message is always in unique form, reduce code and print the
right alternatives automatically in an error case.
parent 94f0977b
......@@ -885,14 +885,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
opt_nopager= 1;
break;
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
break;
case 'A':
opt_rehash= 0;
......
......@@ -284,15 +284,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
#endif
break;
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
}
if (error)
{
usage();
......
......@@ -948,14 +948,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
remote_opt= 1;
break;
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
case OPT_START_DATETIME:
start_datetime= convert_str_to_timestamp(start_datetime_str);
break;
......
......@@ -310,15 +310,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break;
case 'V': print_version(); exit(0);
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
}
return 0;
}
......
......@@ -790,15 +790,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break;
}
case (int) OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
}
return 0;
}
......
......@@ -231,14 +231,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break;
#endif
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
case '#':
DBUG_PUSH(argument ? argument : "d:t:o");
break;
......
......@@ -287,14 +287,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
#endif
break;
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
case '#':
DBUG_PUSH(argument ? argument : "d:t:o");
break;
......
......@@ -568,14 +568,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
#endif
break;
case OPT_MYSQL_PROTOCOL:
{
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
{
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
exit(1);
}
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
opt->name);
break;
}
case '#':
DBUG_PUSH(argument ? argument : default_dbug_option);
break;
......
......@@ -26,6 +26,8 @@ typedef struct st_typelib { /* Different types saved here */
unsigned int *type_lengths;
} TYPELIB;
extern int find_type_or_exit(const char *x, TYPELIB *typelib,
const char *option);
extern int find_type(char *x,TYPELIB *typelib,unsigned int full_name);
extern void make_type(char *to,unsigned int nr,TYPELIB *typelib);
extern const char *get_type(TYPELIB *typelib,unsigned int nr);
......
......@@ -7,3 +7,4 @@ SOCKET
ERROR 2047 (HY000): Wrong or unknown protocol
ERROR 2047 (HY000): Wrong or unknown protocol
Unknown option to protocol: NullS
Alternatives are: 'TCP','SOCKET','PIPE','MEMORY'
......@@ -20,6 +20,28 @@
#include <m_ctype.h>
int find_type_or_exit(const char *x, TYPELIB *typelib, const char *option)
{
int res;
const char **ptr;
if ((res= find_type((my_string) x, typelib, 2)) <= 0)
{
ptr= typelib->type_names;
if (!*x)
fprintf(stderr, "No option given to %s\n", option);
else
fprintf(stderr, "Unknown option to %s: %s\n", option, x);
fprintf(stderr, "Alternatives are: '%s'", *ptr);
while (*++ptr)
fprintf(stderr, ",'%s'", *ptr);
fprintf(stderr, "\n");
exit(1);
}
return res;
}
/*
Search after a string in a list of strings. Endspace in x is not compared.
......
......@@ -737,6 +737,8 @@ pthread_handler_t handle_connections_shared_memory(void *arg);
#endif
pthread_handler_t handle_slave(void *arg);
static ulong find_bit_type(const char *x, TYPELIB *bit_lib);
static ulong find_bit_type_or_exit(const char *x, TYPELIB *bit_lib,
const char *option);
static void clean_up(bool print_message);
static int test_if_case_insensitive(const char *dir_name);
......@@ -7411,11 +7413,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case (int) OPT_INIT_RPL_ROLE:
{
int role;
if ((role=find_type(argument, &rpl_role_typelib, 2)) <= 0)
{
fprintf(stderr, "Unknown replication role: %s\n", argument);
exit(1);
}
role= find_type_or_exit(argument, &rpl_role_typelib, opt->name);
rpl_status = (role == 1) ? RPL_AUTH_MASTER : RPL_IDLE_SLAVE;
break;
}
......@@ -7471,17 +7469,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_BINLOG_FORMAT:
{
int id;
if ((id= find_type(argument, &binlog_format_typelib, 2)) <= 0)
{
fprintf(stderr,
"Unknown binary log format: '%s' "
"(should be one of '%s', '%s', '%s')\n",
argument,
binlog_format_names[BINLOG_FORMAT_STMT],
binlog_format_names[BINLOG_FORMAT_ROW],
binlog_format_names[BINLOG_FORMAT_MIXED]);
exit(1);
}
id= find_type_or_exit(argument, &binlog_format_typelib, opt->name);
global_system_variables.binlog_format= opt_binlog_format_id= id - 1;
break;
}
......@@ -7541,12 +7529,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
else
{
log_output_str= argument;
if ((log_output_options=
find_bit_type(argument, &log_output_typelib)) == ~(ulong) 0)
{
fprintf(stderr, "Unknown option to log-output: %s\n", argument);
exit(1);
}
log_output_options=
find_bit_type_or_exit(argument, &log_output_typelib, opt->name);
}
break;
}
......@@ -7561,10 +7545,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
type= 5 1 2 3 4
(DISABLE ) - (OFF | ON) - (0 | 1)
*/
switch ((type=find_type(argument, &Events::opt_typelib, 1))) {
case 0:
fprintf(stderr, "Unknown option to event-scheduler: %s\n",argument);
exit(1);
type= find_type_or_exit(argument, &Events::opt_typelib, opt->name);
switch (type) {
case 5: /* OPT_DISABLED */
Events::opt_event_scheduler= Events::EVENTS_DISABLED;
break;
......@@ -7714,11 +7696,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
else
{
int type;
if ((type=find_type(argument, &delay_key_write_typelib, 2)) <= 0)
{
fprintf(stderr,"Unknown delay_key_write type: %s\n",argument);
exit(1);
}
type= find_type_or_exit(argument, &delay_key_write_typelib, opt->name);
delay_key_write_options= (uint) type-1;
}
break;
......@@ -7729,11 +7707,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_TX_ISOLATION:
{
int type;
if ((type=find_type(argument, &tx_isolation_typelib, 2)) <= 0)
{
fprintf(stderr,"Unknown transaction isolation type: %s\n",argument);
exit(1);
}
type= find_type_or_exit(argument, &tx_isolation_typelib, opt->name);
global_system_variables.tx_isolation= (type-1);
break;
}
......@@ -7774,16 +7748,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break;
case OPT_NDB_DISTRIBUTION:
int id;
if ((id= find_type(argument, &ndb_distribution_typelib, 2)) <= 0)
{
fprintf(stderr,
"Unknown ndb distribution type: '%s' "
"(should be '%s' or '%s')\n",
argument,
ndb_distribution_names[ND_KEYHASH],
ndb_distribution_names[ND_LINHASH]);
exit(1);
}
id= find_type_or_exit(argument, &ndb_distribution_typelib, opt->name);
opt_ndb_distribution_id= (enum ndb_distribution)(id-1);
break;
case OPT_NDB_EXTRA_LOGGING:
......@@ -7823,12 +7788,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
else
{
myisam_recover_options_str=argument;
if ((myisam_recover_options=
find_bit_type(argument, &myisam_recover_typelib)) == ~(ulong) 0)
{
fprintf(stderr, "Unknown option to myisam-recover: %s\n",argument);
exit(1);
}
myisam_recover_options=
find_bit_type_or_exit(argument, &myisam_recover_typelib, opt->name);
}
ha_open_options|=HA_OPEN_ABORT_IF_CRASHED;
break;
......@@ -7841,14 +7802,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
myisam_concurrent_insert= 0; /* --skip-concurrent-insert */
break;
case OPT_TC_HEURISTIC_RECOVER:
{
if ((tc_heuristic_recover=find_type(argument,
&tc_heuristic_recover_typelib, 2)) <=0)
{
fprintf(stderr, "Unknown option to tc-heuristic-recover: %s\n",argument);
exit(1);
}
}
tc_heuristic_recover= find_type_or_exit(argument,
&tc_heuristic_recover_typelib,
opt->name);
break;
case OPT_MYISAM_STATS_METHOD:
{
ulong method_conv;
......@@ -7856,11 +7813,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
LINT_INIT(method_conv);
myisam_stats_method_str= argument;
if ((method=find_type(argument, &myisam_stats_method_typelib, 2)) <= 0)
{
fprintf(stderr, "Invalid value of myisam_stats_method: %s.\n", argument);
exit(1);
}
method= find_type_or_exit(argument, &myisam_stats_method_typelib,
opt->name);
switch (method-1) {
case 2:
method_conv= MI_STATS_METHOD_IGNORE_NULLS;
......@@ -7879,12 +7833,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_SQL_MODE:
{
sql_mode_str= argument;
if ((global_system_variables.sql_mode=
find_bit_type(argument, &sql_mode_typelib)) == ~(ulong) 0)
{
fprintf(stderr, "Unknown option to sql-mode: %s\n", argument);
exit(1);
}
global_system_variables.sql_mode=
find_bit_type_or_exit(argument, &sql_mode_typelib, opt->name);
global_system_variables.sql_mode= fix_sql_mode(global_system_variables.
sql_mode);
break;
......@@ -8192,6 +8142,30 @@ static void fix_paths(void)
}
static ulong find_bit_type_or_exit(const char *x, TYPELIB *bit_lib,
const char *option)
{
ulong res;
const char **ptr;
if ((res= find_bit_type(x, bit_lib)) == ~(ulong) 0)
{
ptr= bit_lib->type_names;
if (!*x)
fprintf(stderr, "No option given to %s\n", option);
else
fprintf(stderr, "Wrong option to %s. Option(s) given: %s\n", option, x);
fprintf(stderr, "Alternatives are: '%s'", *ptr);
while (*++ptr)
fprintf(stderr, ",'%s'", *ptr);
fprintf(stderr, "\n");
exit(1);
}
return res;
}
/*
Return a bitfield from a string of substrings separated by ','
returns ~(ulong) 0 on error.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment