summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2006-01-15 18:02:46 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2006-01-15 18:02:46 +0000
commit56bd1469babf51ef01d5c7fe5a8a9da54cfc1da3 (patch)
tree514fc8d6342716f73ff703073d946a1cfff5656b
parent417d6b1793055226ffe478022a204382af548ce2 (diff)
Allow application arguments to be quoted, allowing '|' characters inside arguments
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@8079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-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;
}