summaryrefslogtreecommitdiff
path: root/funcs
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2007-01-07 14:44:49 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2007-01-07 14:44:49 +0000
commit785483f3040f47d2fd34e9904f04d6408470d083 (patch)
tree50d16b12c128c8967f19903561eb4cce3feee13c /funcs
parent6b13c4d7d4dd81f77e0caac97b86380ba3151665 (diff)
Modifications to allow the output of SHELL() to be split per line (Issue 8676)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@49786 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'funcs')
-rw-r--r--funcs/func_cut.c16
-rw-r--r--funcs/func_shell.c2
-rw-r--r--funcs/func_strings.c10
3 files changed, 25 insertions, 3 deletions
diff --git a/funcs/func_cut.c b/funcs/func_cut.c
index 2f488a31d..9cab185b2 100644
--- a/funcs/func_cut.c
+++ b/funcs/func_cut.c
@@ -131,7 +131,7 @@ static int cut_internal(struct ast_channel *chan, char *data, char *buffer, size
AST_STANDARD_APP_ARGS(args, parse);
/* Check and parse arguments */
- if(args.argc < 3){
+ if (args.argc < 3) {
return ERROR_NOARG;
} else {
char d, ds[2];
@@ -145,7 +145,19 @@ static int cut_internal(struct ast_channel *chan, char *data, char *buffer, size
return ERROR_NOMEM;
}
- d = args.delimiter[0] ? args.delimiter[0] : '-';
+ if (args.delimiter[0] == '\\') {
+ if (args.delimiter[1] == 'n')
+ d = '\n';
+ else if (args.delimiter[1] == 't')
+ d = '\t';
+ else if (args.delimiter[1])
+ d = args.delimiter[1];
+ else
+ d = '-';
+ } else if (args.delimiter[0])
+ d = args.delimiter[0];
+ else
+ d = '-';
/* String form of the delimiter, for use with strsep(3) */
snprintf(ds, sizeof(ds), "%c", d);
diff --git a/funcs/func_shell.c b/funcs/func_shell.c
index fc155e9b3..b2557fba9 100644
--- a/funcs/func_shell.c
+++ b/funcs/func_shell.c
@@ -39,7 +39,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/utils.h"
#include "asterisk/app.h"
-static int shell_helper(struct ast_channel *chan, char *cmd, char *data,
+static int shell_helper(struct ast_channel *chan, const char *cmd, char *data,
char *buf, size_t len)
{
if (ast_strlen_zero(data)) {
diff --git a/funcs/func_strings.c b/funcs/func_strings.c
index 9f843b669..de87c197a 100644
--- a/funcs/func_strings.c
+++ b/funcs/func_strings.c
@@ -56,6 +56,16 @@ static int function_fieldqty(struct ast_channel *chan, const char *cmd,
AST_STANDARD_APP_ARGS(args, parse);
if (args.delim) {
pbx_retrieve_variable(chan, args.varname, &varval, buf, len, NULL);
+ if (args.delim[0] == '\\') {
+ if (args.delim[1] == 'n')
+ ast_copy_string(args.delim, "\n", 2);
+ else if (args.delim[1] == 't')
+ ast_copy_string(args.delim, "\t", 2);
+ else if (args.delim[1])
+ ast_copy_string(args.delim, &args.delim[1], 2);
+ else
+ ast_copy_string(args.delim, "-", 2);
+ }
while (strsep(&varval, args.delim))
fieldcount++;
} else {