From a1fdc1c769e1b0e337415da05e7f75d2eeb5c514 Mon Sep 17 00:00:00 2001
From: Tilghman Lesher <tilghman@meg.abyt.es>
Date: Mon, 23 Jul 2007 20:27:26 +0000
Subject: [PATCH] Missed one conversion to comma delimiter (thanks, Juggie) and
 add documentation on the change to the Local channel name.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@76704 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 UPGRADE.txt   |  4 ++++
 res/res_agi.c | 17 ++++++++++-------
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/UPGRADE.txt b/UPGRADE.txt
index 1e76c4130e..16b1777831 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -96,3 +96,7 @@ Channel Drivers:
   user has not configured the automon feature, the normal "415 Unsupported media type"
   is returned, and nothing is done.
 
+* chan_local.c: the comma delimiter inside the channel name has been changed to a
+  semicolon, in order to make the Local channel driver compatible with the comma
+  delimiter change in applications.
+
diff --git a/res/res_agi.c b/res/res_agi.c
index 13fe232249..8b0491087d 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -2014,8 +2014,12 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
 {
 	enum agi_result res;
 	struct ast_module_user *u;
-	char *argv[MAX_ARGS], buf[2048] = "", *tmp = buf, *stringp;
-	int argc = 0, fds[2], efd = -1, pid;
+	char buf[2048] = "", *tmp = buf;
+	int fds[2], efd = -1, pid;
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(arg)[MAX_ARGS];
+	);
+	__attribute__((unused))char *empty = NULL;
 	AGI agi;
 
 	if (ast_strlen_zero(data)) {
@@ -2025,9 +2029,8 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
 	ast_copy_string(buf, data, sizeof(buf));
 
 	memset(&agi, 0, sizeof(agi));
-        while ((stringp = strsep(&tmp, "|")) && argc < MAX_ARGS-1)
-		argv[argc++] = stringp;
-	argv[argc] = NULL;
+	AST_STANDARD_APP_ARGS(args, tmp);
+	args.argv[args.argc] = NULL;
 
 	u = ast_module_user_add(chan);
 #if 0
@@ -2039,13 +2042,13 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
 		}
 	}
 #endif
-	res = launch_script(argv[0], argv, fds, enhanced ? &efd : NULL, &pid);
+	res = launch_script(args.argv[0], args.argv, fds, enhanced ? &efd : NULL, &pid);
 	if (res == AGI_RESULT_SUCCESS) {
 		int status = 0;
 		agi.fd = fds[1];
 		agi.ctrl = fds[0];
 		agi.audio = efd;
-		res = run_agi(chan, argv[0], &agi, pid, &status, dead, argc, argv);
+		res = run_agi(chan, args.argv[0], &agi, pid, &status, dead, args.argc, args.argv);
 		/* If the fork'd process returns non-zero, set AGISTATUS to FAILURE */
 		if (res == AGI_RESULT_SUCCESS && status)
 			res = AGI_RESULT_FAILURE;
-- 
GitLab