From 5aa2136eb93ceec53630cee81c40770eba1bf8b7 Mon Sep 17 00:00:00 2001 From: russell Date: Thu, 1 Dec 2005 02:32:10 +0000 Subject: use ast_app_separate_args to split arguments (issue #5686) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7250 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_externalivr.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c index ff5147d72..54b730b65 100644 --- a/apps/app_externalivr.c +++ b/apps/app_externalivr.c @@ -43,6 +43,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/pbx.h" #include "asterisk/module.h" #include "asterisk/linkedlists.h" +#include "asterisk/app.h" static const char *tdesc = "External IVR Interface Application"; @@ -250,10 +251,9 @@ static int app_exec(struct ast_channel *chan, void *data) int res = -1; int gen_active = 0; int pid; - char *command; char *argv[32]; int argc = 1; - char *buf; + char *buf, *command; FILE *child_commands = NULL; FILE *child_errors = NULL; FILE *child_events = NULL; @@ -270,11 +270,13 @@ static int app_exec(struct ast_channel *chan, void *data) } buf = ast_strdupa(data); - command = strsep(&buf, "|"); - memset(argv, 0, sizeof(argv) / sizeof(argv[0])); - argv[0] = command; - while ((argc < 31) && (argv[argc++] = strsep(&buf, "|"))); - argv[argc] = NULL; + if (!buf) { + ast_log(LOG_ERROR, "Out of memory!\n"); + LOCAL_USER_REMOVE(u); + return -1; + } + + argc = ast_app_separate_args(buf, '|', argv, sizeof(argv) / sizeof(argv[0])); if (pipe(child_stdin)) { ast_chan_log(LOG_WARNING, chan, "Could not create pipe for child input: %s\n", strerror(errno)); @@ -316,8 +318,8 @@ static int app_exec(struct ast_channel *chan, void *data) dup2(child_stderr[1], STDERR_FILENO); for (i = STDERR_FILENO + 1; i < 1024; i++) close(i); - execv(command, argv); - fprintf(stderr, "Failed to execute '%s': %s\n", command, strerror(errno)); + execv(argv[0], argv); + fprintf(stderr, "Failed to execute '%s': %s\n", argv[0], strerror(errno)); exit(1); } else { /* parent process */ -- cgit v1.2.3