diff --git a/app.c b/app.c index 40bc06e294..a96acd3736 100755 --- a/app.c +++ b/app.c @@ -1506,27 +1506,30 @@ int ast_parseoptions(const struct ast_option *options, struct ast_flags *flags, int argloc; char *arg; int res = 0; + flags->flags = 0; + if (!optstr) return 0; + s = optstr; - while(*s) { + while (*s) { curarg = *s & 0x7f; flags->flags |= options[curarg].flag; - argloc = options[curarg].argoption; + argloc = options[curarg].arg_index; s++; if (*s == '(') { /* Has argument */ s++; arg = s; - while(*s && (*s != ')')) s++; + while (*s && (*s != ')')) s++; if (*s) { if (argloc) args[argloc - 1] = arg; *s = '\0'; s++; } else { - ast_log(LOG_WARNING, "Missing closing parenthesis for argument '%c'\n", curarg); + ast_log(LOG_WARNING, "Missing closing parenthesis for argument '%c' in string '%s'\n", curarg, arg); res = -1; } } else if (argloc) @@ -1534,4 +1537,3 @@ int ast_parseoptions(const struct ast_option *options, struct ast_flags *flags, } return res; } - diff --git a/include/asterisk/app.h b/include/asterisk/app.h index 6f0f0d955d..706871f8d6 100755 --- a/include/asterisk/app.h +++ b/include/asterisk/app.h @@ -75,7 +75,7 @@ struct ast_ivr_menu { struct ast_option { unsigned int flag; - int argoption; + int arg_index; }; extern int ast_parseoptions(const struct ast_option *options, struct ast_flags *flags, char **args, char *optstr);