added function QUOTE into strings, which allows
authorMatt O'Gorman <mogorman@digium.com>
Thu, 23 Feb 2006 22:59:16 +0000 (22:59 +0000)
committerMatt O'Gorman <mogorman@digium.com>
Thu, 23 Feb 2006 22:59:16 +0000 (22:59 +0000)
for quoted strings, and escapes them properly.
slightly modified patch from bug #6257

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@10934 65c4cc65-6c06-0410-ace0-fbb531ad65f3

funcs/func_strings.c

index 26712f8..059c1ce 100644 (file)
@@ -204,6 +204,36 @@ static struct ast_custom_function array_function = {
                "entire argument, since Set can take multiple arguments itself.\n",
 };
 
+static char *builtin_function_quote(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+{
+       char *bufptr = buf, *dataptr = data;
+       *bufptr++ = '"';
+       for (; bufptr < buf + len - 1; dataptr++) {
+               if (*dataptr == '\\') {
+                       *bufptr++ = '\\';
+                       *bufptr++ = '\\';
+               } else if (*dataptr == '"') {
+                       *bufptr++ = '\\';
+                       *bufptr++ = '"';
+               } else if (*dataptr == '\0') {
+                       break;
+               } else {
+                       *bufptr++ = *dataptr;
+               }
+       }
+       *bufptr++ = '"';
+       *bufptr = '\0';
+       return buf;
+}
+
+static struct ast_custom_function quote_function = {
+       .name = "QUOTE",
+       .synopsis = "Quotes a given string, escaping embedded quotes as necessary",
+       .syntax = "QUOTE(<string>)",
+       .read = builtin_function_quote,
+};
+
+
 static int len(struct ast_channel *chan, char *cmd, char *data, char *buf,
               size_t len)
 {
@@ -402,6 +432,7 @@ int unload_module(void)
        res |= ast_custom_function_unregister(&filter_function);
        res |= ast_custom_function_unregister(&regex_function);
        res |= ast_custom_function_unregister(&array_function);
+       res |= ast_custom_function_unregister(&quote_function);
        res |= ast_custom_function_unregister(&len_function);
        res |= ast_custom_function_unregister(&strftime_function);
        res |= ast_custom_function_unregister(&strptime_function);
@@ -419,6 +450,7 @@ int load_module(void)
        res |= ast_custom_function_register(&filter_function);
        res |= ast_custom_function_register(&regex_function);
        res |= ast_custom_function_register(&array_function);
+       res |= ast_custom_function_register(&quote_function);
        res |= ast_custom_function_register(&len_function);
        res |= ast_custom_function_register(&strftime_function);
        res |= ast_custom_function_register(&strptime_function);