diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-30 20:09:58 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-30 20:09:58 +0000 |
commit | d3eab04fc9c9ba366166bbbdfc19775d862eedda (patch) | |
tree | 0d6e5b57e5f40a6f4478342bf2cb885c99e735e6 /apps/app_directory.c | |
parent | b3cdd0dfe48230c28ee52300ca96c4b93d6569cf (diff) |
use app arg parsing macros (issue #5681)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7238 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_directory.c')
-rw-r--r-- | apps/app_directory.c | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/apps/app_directory.c b/apps/app_directory.c index dc1181b6d..cbd075692 100644 --- a/apps/app_directory.c +++ b/apps/app_directory.c @@ -41,6 +41,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/config.h" #include "asterisk/say.h" #include "asterisk/utils.h" +#include "asterisk/app.h" static char *tdesc = "Extension Directory"; static char *app = "Directory"; @@ -414,7 +415,12 @@ static int directory_exec(struct ast_channel *chan, void *data) struct localuser *u; struct ast_config *cfg; int last = 1; - char *context, *dialcontext, *dirintro, *options; + char *dirintro, *parse; + AST_DECLARE_APP_ARGS(args, + AST_APP_ARG(vmcontext); + AST_APP_ARG(dialcontext); + AST_APP_ARG(options); + ); if (ast_strlen_zero(data)) { ast_log(LOG_WARNING, "Directory requires an argument (context[,dialcontext])\n"); @@ -423,28 +429,32 @@ static int directory_exec(struct ast_channel *chan, void *data) LOCAL_USER_ADD(u); - context = ast_strdupa(data); - dialcontext = strchr(context, '|'); - if (dialcontext) { - *dialcontext = '\0'; - dialcontext++; - options = strchr(dialcontext, '|'); - if (options) { - *options = '\0'; - options++; - if (strchr(options, 'f')) - last = 0; - } - } else - dialcontext = context; + parse = ast_strdupa(data); + + if (!parse) { + ast_log(LOG_ERROR, "Out of memory!\n"); + LOCAL_USER_REMOVE(u); + return -1; + } + + AST_STANDARD_APP_ARGS(args, parse); + + if (args.options) { + if (strchr(args.options, 'f')) + last = 0; + } + + if (ast_strlen_zero(args.dialcontext)) + args.dialcontext = args.vmcontext; - cfg = realtime_directory(context); + cfg = realtime_directory(args.vmcontext); if (!cfg) { + ast_log(LOG_ERROR, "Unable to read the configuration data!\n"); LOCAL_USER_REMOVE(u); return -1; } - dirintro = ast_variable_retrieve(cfg, context, "directoryintro"); + dirintro = ast_variable_retrieve(cfg, args.vmcontext, "directoryintro"); if (ast_strlen_zero(dirintro)) dirintro = ast_variable_retrieve(cfg, "general", "directoryintro"); if (ast_strlen_zero(dirintro)) { @@ -466,7 +476,7 @@ static int directory_exec(struct ast_channel *chan, void *data) if (!res) res = ast_waitfordigit(chan, 5000); if (res > 0) { - res = do_directory(chan, cfg, context, dialcontext, res, last); + res = do_directory(chan, cfg, args.vmcontext, args.dialcontext, res, last); if (res > 0) { res = ast_waitstream(chan, AST_DIGIT_ANY); ast_stopstream(chan); |