my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...) { #ifdef __WIN__ const char *quote_str= "\""; const uint quote_len= 1; #else const char *quote_str= "\'"; const uint quote_len= 1; #endif /* __WIN__ */ my_bool ret= TRUE; va_list dirty_text; ret&= dynstr_append_mem(str, quote_str, quote_len); /* Leading quote */ va_start(dirty_text, append); while (append != NullS) { 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') { ret&= dynstr_append_mem(str, cur_pos, (uint) (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_mem(str, cur_pos, (uint) (next_pos - cur_pos)); append= va_arg(dirty_text, char *); } va_end(dirty_text); ret&= dynstr_append_mem(str, quote_str, quote_len); /* Trailing quote */ return ret; }
my_bool append_dynamic_string_array(DYNAMIC_STRING_ARRAY *array, const char *elem, size_t elem_len) { dynstr_pos_info pos_info; DBUG_ENTER("append_dynamic_string_array"); if (array && elem) { if (!elem_len) { DBUG_RETURN(FALSE); } pos_info.elem_off = array->dynstr->length; pos_info.elem_size = elem_len; if (dynstr_append_mem(array->dynstr, elem, elem_len) || insert_dynamic(array->pos_info_arr, (uchar *) &pos_info)) { DBUG_RETURN(TRUE); } ++array->cur_idx; DBUG_RETURN(FALSE); } DBUG_RETURN(TRUE); }
my_bool dynstr_append(DYNAMIC_STRING *str, const char *append) { return dynstr_append_mem(str,append,(uint) strlen(append)); }