summaryrefslogtreecommitdiff
path: root/libmysql/libmysql.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmysql/libmysql.c')
-rw-r--r--libmysql/libmysql.c24
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);
}