diff --git a/mysys/string.c b/mysys/string.c
index 0928bca809ae769abd2fe6fdcdbfc2857bd364ba..df78f2b98b53f167bf750626d304ec9e3d64f8df 100644
--- a/mysys/string.c
+++ b/mysys/string.c
@@ -131,37 +131,35 @@ my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
 my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...)
 {
 #ifdef __WIN__
-  char quote_str[]= "\"";
+  const char *quote_str= "\"";
+  const uint  quote_len= 1;
 #else
-  char quote_str[]= "\'";
+  const char *quote_str= "\'";
+  const uint  quote_len= 1;
 #endif /* __WIN__ */
   my_bool ret= TRUE;
   va_list dirty_text;
 
-  ret&= dynstr_append(str, quote_str);          /* Leading quote */
-  va_start(dirty_text,append);
+  ret&= dynstr_append_mem(str, quote_str, quote_len); /* Leading quote */
+  va_start(dirty_text, append);
   while (append != NullS)
   {
-    char *cur_pos=  append;
-    char *next_pos= cur_pos;
+    const char  *cur_pos= append;
+    const char *next_pos= cur_pos;
 
     /* Search for quote in each string and replace with escaped quote */
     while(*(next_pos= strcend(cur_pos, quote_str[0])) != '\0')
     {
-      char *tmp_buff= my_malloc((next_pos - cur_pos) + 1, MYF(MY_ZEROFILL));
-      strnmov(tmp_buff, cur_pos, (next_pos - cur_pos));
-      ret&= dynstr_append(str, tmp_buff);
-      my_free((gptr)tmp_buff, MYF(0));
-
-      ret&= dynstr_append(str ,"\\");
-      ret&= dynstr_append(str, quote_str);
+      ret&= dynstr_append_mem(str, cur_pos, next_pos - cur_pos);
+      ret&= dynstr_append_mem(str ,"\\", 1);
+      ret&= dynstr_append_mem(str, quote_str, quote_len);
       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 *);
   }
   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;
 }