Commit d3e6cb6b authored by iggy@recycle.(none)'s avatar iggy@recycle.(none)

Bug#22807 mysql_upgrade fails when called with a basedir-path containing spaces

- Corrected compiler warnings and performance problems with new 
dynstr_append_os_quoted function.
parent ef5f757a
...@@ -132,37 +132,35 @@ my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, ...@@ -132,37 +132,35 @@ my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...) my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...)
{ {
#ifdef __WIN__ #ifdef __WIN__
char quote_str[]= "\""; const char *quote_str= "\"";
const uint quote_len= 1;
#else #else
char quote_str[]= "\'"; const char *quote_str= "\'";
const uint quote_len= 1;
#endif /* __WIN__ */ #endif /* __WIN__ */
my_bool ret= TRUE; my_bool ret= TRUE;
va_list dirty_text; va_list dirty_text;
ret&= dynstr_append(str, quote_str); /* Leading quote */ ret&= dynstr_append_mem(str, quote_str, quote_len); /* Leading quote */
va_start(dirty_text,append); va_start(dirty_text, append);
while (append != NullS) while (append != NullS)
{ {
char *cur_pos= append; const char *cur_pos= append;
char *next_pos= cur_pos; const char *next_pos= cur_pos;
/* Search for quote in each string and replace with escaped quote */ /* Search for quote in each string and replace with escaped quote */
while(*(next_pos= strcend(cur_pos, quote_str[0])) != '\0') while(*(next_pos= strcend(cur_pos, quote_str[0])) != '\0')
{ {
char *tmp_buff= my_malloc((next_pos - cur_pos) + 1, MYF(MY_ZEROFILL)); ret&= dynstr_append_mem(str, cur_pos, next_pos - cur_pos);
strnmov(tmp_buff, cur_pos, (next_pos - cur_pos)); ret&= dynstr_append_mem(str ,"\\", 1);
ret&= dynstr_append(str, tmp_buff); ret&= dynstr_append_mem(str, quote_str, quote_len);
my_free((gptr)tmp_buff, MYF(0));
ret&= dynstr_append(str ,"\\");
ret&= dynstr_append(str, quote_str);
cur_pos= next_pos + 1; cur_pos= next_pos + 1;
} }
ret&= dynstr_append(str, cur_pos); ret&= dynstr_append_mem(str, cur_pos, next_pos - cur_pos);
append= va_arg(dirty_text, char *); append= va_arg(dirty_text, char *);
} }
va_end(dirty_text); va_end(dirty_text);
ret&= dynstr_append(str, quote_str); /* Trailing quote */ ret&= dynstr_append_mem(str, quote_str, quote_len); /* Trailing quote */
return ret; return ret;
} }
......
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