diff --git a/pbx.c b/pbx.c index f96e7de8c7..e7506b97b7 100755 --- a/pbx.c +++ b/pbx.c @@ -4588,19 +4588,7 @@ void pbx_builtin_clear_globals(void) static int pbx_checkcondition(char *condition) { - char *s; - int ret; - - s=strdup(condition); - - ret=1; - - if ((strcasecmp(s,"0")) || ast_strlen_zero(s)) { - ret=0; - } - - free(s); - return(ret); + return condition ? atoi(condition) : 0; } static int pbx_builtin_gotoif(struct ast_channel *chan, void *data) @@ -4615,17 +4603,12 @@ static int pbx_builtin_gotoif(struct ast_channel *chan, void *data) return 0; } - s=strdup(data); + s=ast_strdupa(data); stringp=s; condition=strsep(&stringp,"?"); branch1=strsep(&stringp,":"); branch2=strsep(&stringp,""); - - if (pbx_checkcondition(condition)) { - branch=branch2; - } else { - branch=branch1; - } + branch = pbx_checkcondition(condition) ? branch1 : branch2; if ((branch==NULL) || ast_strlen_zero(branch)) { ast_log(LOG_NOTICE, "Not taking any branch\n"); @@ -4633,7 +4616,7 @@ static int pbx_builtin_gotoif(struct ast_channel *chan, void *data) } rc=pbx_builtin_goto(chan,branch); - free(s); + return(rc); }