From ab2cd8689dcb31eded0f7c056ec4cbca9922b46d Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Oct 2005 10:06:31 -0700 Subject: Fail when two messages exist for the same language for an error in the server error messages file. (Bug #13071) extra/comp_err.c: Fail when two messages for the same language are given for an error --- extra/comp_err.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'extra') diff --git a/extra/comp_err.c b/extra/comp_err.c index b322be2b8ed..d0e387dcd35 100644 --- a/extra/comp_err.c +++ b/extra/comp_err.c @@ -131,7 +131,8 @@ static struct languages *parse_charset_string(char *str); static struct errors *parse_error_string(char *ptr, int er_count); static struct message *parse_message_string(struct message *new_message, char *str); -static struct message *find_message(struct errors *err, const char *lang); +static struct message *find_message(struct errors *err, const char *lang, + my_bool no_default); static int parse_input_file(const char *file_name, struct errors **top_error, struct languages **top_language); static int get_options(int *argc, char ***argv); @@ -305,7 +306,7 @@ static int create_sys_files(struct languages *lang_head, for (tmp_error= error_head; tmp_error; tmp_error= tmp_error->next_error) { /* dealing with messages */ - tmp= find_message(tmp_error, tmp_lang->lang_short_name); + tmp= find_message(tmp_error, tmp_lang->lang_short_name, FALSE); if (!tmp) { @@ -450,6 +451,13 @@ static int parse_input_file(const char *file_name, struct errors **top_error, current_error->er_name); DBUG_RETURN(0); } + if (find_message(current_error, current_message.lang_short_name, TRUE)) + { + fprintf(stderr, "Duplicate message string for error '%s'" + " in language '%s'\n", + current_error->er_name, current_message.lang_short_name); + DBUG_RETURN(0); + } if (insert_dynamic(¤t_error->msg, (byte *) & current_message)) DBUG_RETURN(0); continue; @@ -556,11 +564,19 @@ static char *parse_default_language(char *str) /* - For given error, finds message in given language; if does not exist, - returns english. -*/ + Find the message in a particular language + + SYNOPSIS + find_message() + err Error to find message for + lang Language of message to find + no_default Don't return default (English) if does not exit -static struct message *find_message(struct errors *err, const char *lang) + RETURN VALUE + Returns the message structure if one is found, or NULL if not. +*/ +static struct message *find_message(struct errors *err, const char *lang, + my_bool no_default) { struct message *tmp, *return_val= 0; uint i, count; @@ -579,7 +595,7 @@ static struct message *find_message(struct errors *err, const char *lang) return_val= tmp; } } - DBUG_RETURN(return_val); + DBUG_RETURN(no_default ? NULL : return_val); } -- cgit v1.2.1