[Asterisk-cvs] asterisk/apps app_agi.c,1.31,1.32
jeremy at lists.digium.com
jeremy at lists.digium.com
Tue Mar 23 07:53:51 CST 2004
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv10650/apps
Modified Files:
app_agi.c
Log Message:
fix agi to accept multiple arguments. Bug #664
Index: app_agi.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_agi.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- app_agi.c 12 Mar 2004 18:49:52 -0000 1.31
+++ app_agi.c 23 Mar 2004 12:50:15 -0000 1.32
@@ -95,7 +95,7 @@
#define TONE_BLOCK_SIZE 200
-static int launch_script(char *script, char *args, int *fds, int *efd, int *opid)
+static int launch_script(char *script, char *argv[], int *fds, int *efd, int *opid)
{
char tmp[256];
int pid;
@@ -159,7 +159,7 @@
for (x=STDERR_FILENO + 2;x<1024;x++)
close(x);
/* Execute script */
- execl(script, script, args, (char *)NULL);
+ execv(script, argv);
/* Can't use ast_log since FD's are closed */
fprintf(stderr, "Failed to execute '%s': %s\n", script, strerror(errno));
exit(1);
@@ -1429,12 +1429,13 @@
{
int res=0;
struct localuser *u;
- char *args,*ringy;
- char tmp[256];
+ char *argv[MAX_ARGS];
+ char *tmp = (char *)data;
+ int argc = 0;
int fds[2];
int efd = -1;
int pid;
- char *stringp=tmp;
+ char *stringp;
AGI agi;
if (!data || !strlen(data)) {
ast_log(LOG_WARNING, "AGI requires an argument (script)\n");
@@ -1443,28 +1444,22 @@
memset(&agi, 0, sizeof(agi));
- strncpy(tmp, data, sizeof(tmp)-1);
- strsep(&stringp, "|");
- args = strsep(&stringp, "|");
- ringy = strsep(&stringp,"|");
- if (!args)
- args = "";
+ while ((stringp = strsep(&tmp, "|"))) {
+ argv[argc++] = stringp;
+ }
+ argv[argc] = NULL;
+
LOCAL_USER_ADD(u);
#if 0
/* Answer if need be */
if (chan->_state != AST_STATE_UP) {
- if (ringy) { /* if for ringing first */
- /* a little ringy-dingy first */
- ast_indicate(chan, AST_CONTROL_RINGING);
- sleep(3);
- }
if (ast_answer(chan)) {
LOCAL_USER_REMOVE(u);
return -1;
}
}
#endif
- res = launch_script(tmp, args, fds, enhanced ? &efd : NULL, &pid);
+ res = launch_script(argv[0], argv, fds, enhanced ? &efd : NULL, &pid);
if (!res) {
agi.fd = fds[1];
agi.ctrl = fds[0];
More information about the svn-commits
mailing list