diff options
author | unknown <iggy@recycle.(none)> | 2007-01-18 11:46:29 -0500 |
---|---|---|
committer | unknown <iggy@recycle.(none)> | 2007-01-18 11:46:29 -0500 |
commit | 45b9c2dcc868ffc22b428dd25cb07d3f628c6f23 (patch) | |
tree | 2aa63e0b6a6dd759fad715845e0bd1904240de03 /mysys/string.c | |
parent | 9bca6ffa4135e3a58c062a46eae096bccdd8113c (diff) | |
parent | b1bfec73099b8349f07673e68d1d7ac25316dd4c (diff) | |
download | mariadb-git-45b9c2dcc868ffc22b428dd25cb07d3f628c6f23.tar.gz |
Merge recycle.(none):/src/bug22807/my50-bug22807
into recycle.(none):/src/mysql-5.0-maint
client/mysql_upgrade.c:
Auto merged
include/my_sys.h:
Auto merged
mysys/string.c:
Auto merged
Diffstat (limited to 'mysys/string.c')
-rw-r--r-- | mysys/string.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/mysys/string.c b/mysys/string.c index e64156d430e..0928bca809a 100644 --- a/mysys/string.c +++ b/mysys/string.c @@ -115,6 +115,58 @@ my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, } +/** Concatenates any number of strings, escapes any OS quote in the result then + * surround the whole affair in another set of quotes which is finally appended + * to specified DYNAMIC_STRING. This function is especially useful when + * building strings to be executed with the system() function. + * @param str Dynamic String which will have addtional strings appended. + * @param append String to be appended. + * @param ... Optional. Additional string(s) to be appended. + * + * @note The final argument in the list must be NullS even if no additional + * options are passed. + * + * @return True = Success. + */ +my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...) +{ +#ifdef __WIN__ + char quote_str[]= "\""; +#else + char quote_str[]= "\'"; +#endif /* __WIN__ */ + my_bool ret= TRUE; + va_list dirty_text; + + ret&= dynstr_append(str, quote_str); /* Leading quote */ + va_start(dirty_text,append); + while (append != NullS) + { + char *cur_pos= append; + 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); + cur_pos= next_pos + 1; + } + ret&= dynstr_append(str, cur_pos); + append= va_arg(dirty_text, char *); + } + va_end(dirty_text); + ret&= dynstr_append(str, quote_str); /* Trailing quote */ + + return ret; +} + + void dynstr_free(DYNAMIC_STRING *str) { if (str->str) |