Index: apps/app_directory.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_directory.c,v retrieving revision 1.51 diff -u -r1.51 app_directory.c --- apps/app_directory.c 7 Nov 2005 22:01:21 -0000 1.51 +++ apps/app_directory.c 9 Nov 2005 15:55:09 -0000 @@ -41,6 +41,7 @@ #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"; @@ -408,7 +409,12 @@ 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"); @@ -417,28 +423,32 @@ 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)) { @@ -460,7 +470,7 @@ 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);