diff options
author | mnick <mnick@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-30 15:41:46 +0000 |
---|---|---|
committer | mnick <mnick@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-30 15:41:46 +0000 |
commit | 9ae99e7c9b5cb5147ce08e10dba79a38ca2b902f (patch) | |
tree | c64ba59a3c19afd008b8e4c1fce0ee7cb35f20a1 /funcs | |
parent | 4ae29664db37e8fd57e3d0bc2e6e1e916a6925df (diff) |
added a new dialplan function 'CSV_QUOTE' and changed the cdr_custom.sample.conf
(closes issue #15471)
Reported by: dkerr
Patches:
csv_quote_14.txt uploaded by mnick (license )
Tested by: mnick
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@221157 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs')
-rw-r--r-- | funcs/func_strings.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/funcs/func_strings.c b/funcs/func_strings.c index 3dcca56ee..582691c99 100644 --- a/funcs/func_strings.c +++ b/funcs/func_strings.c @@ -422,6 +422,43 @@ static struct ast_custom_function quote_function = { .read = quote, }; +static int csv_quote(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) +{ + char *bufptr = buf, *dataptr = data; + + if (len < 3){ /* at least two for quotes and one for binary zero */ + ast_log(LOG_ERROR, "Not enough buffer"); + return -1; + } + + if (ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "No argument specified!\n"); + ast_copy_string(buf,"\"\"",len); + return 0; + } + + *bufptr++ = '"'; + for (; bufptr < buf + len - 3; dataptr++){ + if (*dataptr == '"') { + *bufptr++ = '"'; + *bufptr++ = '"'; + } else if (*dataptr == '\0') { + break; + } else { + *bufptr++ = *dataptr; + } + } + *bufptr++ = '"'; + *bufptr='\0'; + return 0; +} + +static struct ast_custom_function csv_quote_function = { + .name = "CSV_QUOTE", + .synopsis = "Quotes a given string for use in a CSV file, escaping embedded quotes as necessary", + .syntax = "CSV_QUOTE(<string>)", + .read = csv_quote, +}; static int len(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) @@ -616,6 +653,7 @@ static int unload_module(void) res |= ast_custom_function_unregister(®ex_function); res |= ast_custom_function_unregister(&array_function); res |= ast_custom_function_unregister("e_function); + res |= ast_custom_function_unregister(&csv_quote_function); res |= ast_custom_function_unregister(&len_function); res |= ast_custom_function_unregister(&strftime_function); res |= ast_custom_function_unregister(&strptime_function); @@ -635,6 +673,7 @@ static int load_module(void) res |= ast_custom_function_register(®ex_function); res |= ast_custom_function_register(&array_function); res |= ast_custom_function_register("e_function); + res |= ast_custom_function_register(&csv_quote_function); res |= ast_custom_function_register(&len_function); res |= ast_custom_function_register(&strftime_function); res |= ast_custom_function_register(&strptime_function); |