summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmysqld/lib_sql.cc13
-rw-r--r--libmysqld/libmysqld.c4
2 files changed, 7 insertions, 10 deletions
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 5b3278694e3..771d68cfa3c 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -80,10 +80,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
if ((net->last_errno= thd->net.last_errno))
{
- memcpy(net->last_error, net->last_error,
- sizeof(net->last_error));
- memcpy(net->sqlstate, thd->net.sqlstate,
- sizeof(net->sqlstate));
+ memcpy(net->last_error, thd->net.last_error, sizeof(net->last_error));
+ memcpy(net->sqlstate, thd->net.sqlstate, sizeof(net->sqlstate));
}
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
return result;
@@ -482,15 +480,16 @@ bool Protocol_simple::store_null()
bool Protocol::net_store_data(const char *from, uint length)
{
- if (!(*next_field=alloc_root(alloc, length + 1)))
+ char *field_buf;
+ if (!(field_buf=alloc_root(alloc, length + sizeof(uint))))
return true;
+ *(uint *)field_buf= length;
+ *next_field= field_buf + sizeof(uint);
memcpy(*next_field, from, length);
- (*next_field)[length]= 0;
if (next_mysql_field->max_length < length)
next_mysql_field->max_length=length;
++next_field;
++next_mysql_field;
-
return false;
}
diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c
index 0c772587c4b..be6589333b7 100644
--- a/libmysqld/libmysqld.c
+++ b/libmysqld/libmysqld.c
@@ -176,9 +176,7 @@ static void STDCALL emb_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_co
MYSQL_ROW end;
for (end=column + field_count; column != end ; column++,to++)
- {
- *to= *column ? strlen(*column) : 0;
- }
+ *to= *column ? *(uint *)((*column) - sizeof(uint)) : 0;
}