diff options
Diffstat (limited to 'libmysql/libmysql.c')
-rw-r--r-- | libmysql/libmysql.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 4d92db26406..7c6d140d2ef 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -188,6 +188,13 @@ void STDCALL mysql_server_end() mysql_thread_end(); free_charsets(); mysql_client_init= org_my_init_done= 0; +#ifdef EMBEDDED_SERVER + if (stderror_file) + { + fclose(stderror_file); + stderror_file= 0; + } +#endif } static MYSQL_PARAMETERS mysql_internal_parameters= @@ -1510,7 +1517,7 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql) } -int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name) +int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name) { struct charset_info_st *cs; const char *save_csdir= charsets_dir; @@ -1518,7 +1525,8 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name) if (mysql->options.charset_dir) charsets_dir= mysql->options.charset_dir; - if ((cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0)))) + if (strlen(cs_name) < MY_CS_NAME_SIZE && + (cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0)))) { char buff[MY_CS_NAME_SIZE + 10]; charsets_dir= save_csdir; @@ -1834,6 +1842,17 @@ static void net_clear_error(NET *net) } } + +static void stmt_clear_error(MYSQL_STMT *stmt) +{ + if (stmt->last_errno) + { + stmt->last_errno= 0; + stmt->last_error[0]= '\0'; + strmov(stmt->sqlstate, not_error_sqlstate); + } +} + /* Set statement error code, sqlstate, and error message from given errcode and sqlstate. @@ -4625,6 +4644,7 @@ my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt) param < param_end; param++) param->long_data_used= 0; + stmt_clear_error(stmt); DBUG_RETURN(0); } |