aboutsummaryrefslogtreecommitdiffstats
path: root/app.c
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2006-01-15 18:02:46 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2006-01-15 18:02:46 +0000
commitd947f8c971d9bc2264dc66063236c89ad57d2ecd (patch)
tree514fc8d6342716f73ff703073d946a1cfff5656b /app.c
parent4542518febc4355154aec86026ef572ec8ecd231 (diff)
Allow application arguments to be quoted, allowing '|' characters inside arguments
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@8079 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'app.c')
-rw-r--r--app.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/app.c b/app.c
index 18c2ab043..88d698f53 100644
--- a/app.c
+++ b/app.c
@@ -1109,7 +1109,7 @@ unsigned int ast_app_separate_args(char *buf, char delim, char **array, int arra
{
int argc;
char *scan;
- int paren = 0;
+ int paren = 0, quote = 0;
if (!buf || !array || !arraylen)
return 0;
@@ -1126,7 +1126,15 @@ unsigned int ast_app_separate_args(char *buf, char delim, char **array, int arra
else if (*scan == ')') {
if (paren)
paren--;
- } else if ((*scan == delim) && !paren) {
+ } else if (*scan == '"') {
+ quote = quote ? 0 : 1;
+ /* Remove quote character from argument */
+ memmove(scan, scan + 1, strlen(scan));
+ scan--;
+ } else if (*scan == '\\') {
+ /* Literal character, don't parse */
+ memmove(scan, scan + 1, strlen(scan));
+ } else if ((*scan == delim) && !paren && !quote) {
*scan++ = '\0';
break;
}