aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_playback.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2006-01-08 00:08:49 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2006-01-08 00:08:49 +0000
commit03b916a8964047182426f5ac6a099ad408aca6d4 (patch)
treea86f11b3a1e36e8a6a519d1c015d8f30739aea5d /apps/app_playback.c
parentdd039e5ddb01ceaa220538e47eda6a887ac7664f (diff)
Merge playback cleanups (bug #6163)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7864 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_playback.c')
-rw-r--r--apps/app_playback.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/apps/app_playback.c b/apps/app_playback.c
index 8f36fc707..653d95467 100644
--- a/apps/app_playback.c
+++ b/apps/app_playback.c
@@ -72,13 +72,13 @@ LOCAL_USER_DECL;
static int playback_exec(struct ast_channel *chan, void *data)
{
- int res = 0, mres = 0;
+ int res = 0;
struct localuser *u;
- char *tmp = NULL;
+ char *tmp;
int option_skip=0;
int option_noanswer = 0;
- char *front = NULL, *back = NULL;
int priority_jump = 0;
+
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(filenames);
AST_APP_ARG(options);
@@ -89,15 +89,13 @@ static int playback_exec(struct ast_channel *chan, void *data)
return -1;
}
- LOCAL_USER_ADD(u);
-
tmp = ast_strdupa(data);
if (!tmp) {
ast_log(LOG_ERROR, "Out of memory!\n");
- LOCAL_USER_REMOVE(u);
return -1;
}
+ LOCAL_USER_ADD(u);
AST_STANDARD_APP_ARGS(args, tmp);
if (args.options) {
@@ -119,13 +117,11 @@ static int playback_exec(struct ast_channel *chan, void *data)
res = ast_answer(chan);
}
if (!res) {
+ int mres = 0;
+ char *front;
+
ast_stopstream(chan);
- front = tmp;
- while (!res && front) {
- if ((back = strchr(front, '&'))) {
- *back = '\0';
- back++;
- }
+ while (!res && (front = strsep(&tmp, "&"))) {
res = ast_streamfile(chan, front, chan->language);
if (!res) {
res = ast_waitstream(chan, "");
@@ -137,12 +133,8 @@ static int playback_exec(struct ast_channel *chan, void *data)
res = 0;
mres = 1;
}
- front = back;
}
- if (mres)
- pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", "FAILED");
- else
- pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", "SUCCESS");
+ pbx_builtin_setvar_helper(chan, "PLAYBACKSTATUS", mres ? "FAILED" : "SUCCESS");
}
LOCAL_USER_REMOVE(u);
return res;