make my_vsnprintf() work with oversized strings

fixed replication bug - flush_master_info() needs to be called every time we read an 
    event from master

this is will not be pushed yet
parent 9e213820
......@@ -39,7 +39,7 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
*to++= *fmt; /* Copy ordinary char */
continue;
}
/* Skipp if max size is used (to be compatible with printf) */
/* Skip if max size is used (to be compatible with printf) */
fmt++;
while (isdigit(*fmt) || *fmt == '.' || *fmt == '-')
fmt++;
......@@ -48,14 +48,13 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
if (*fmt == 's') /* String parameter */
{
reg2 char *par = va_arg(ap, char *);
uint plen;
uint plen,left_len = (uint)(end-to);
if (!par) par = (char*)"(null)";
plen = (uint) strlen(par);
if ((uint) (end-to) > plen) /* Replace if possible */
{
to=strmov(to,par);
continue;
}
if (left_len <= plen)
plen = left_len - 1;
to=strmov(to,par);
continue;
}
else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */
{
......
......@@ -237,7 +237,8 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg,
/*
Explanation of the boolean black magic:
if we are supposed to write magic number try write
clean up if failed
clean
up if failed
then if index_file has not been previously opened, try to open it
clean up if failed
*/
......
......@@ -1762,6 +1762,7 @@ reconnect done to recover from failed read");
from master");
goto err;
}
flush_master_info(mi);
// TODO: check debugging abort code
#ifndef DBUG_OFF
if (abort_slave_event_count && !--events_till_abort)
......
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