add EVAL function, deprecate Eval application (bug #4277)
authorKevin P. Fleming <kpfleming@digium.com>
Sun, 15 May 2005 23:53:11 +0000 (23:53 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Sun, 15 May 2005 23:53:11 +0000 (23:53 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5689 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_eval.c
funcs/func_strings.c

index 9d96207..73b99c0 100755 (executable)
@@ -49,6 +49,12 @@ static int eval_exec(struct ast_channel *chan, void *data)
        int res=0;
        struct localuser *u;
        char *s, *newvar=NULL, tmp[MAXRESULT];
+       static int dep_warning = 0;
+
+       if (!dep_warning) {
+               ast_log(LOG_WARNING, "This application has been deprecated in favor of the dialplan function, EVAL\n");
+               dep_warning = 1;
+       }
 
        LOCAL_USER_ADD(u);
 
index 4d571bf..0385fc5 100755 (executable)
@@ -171,3 +171,35 @@ struct ast_custom_function strftime_function = {
        .syntax = "STRFTIME([<epoch>][,[timezone][,format]])",
        .read = acf_strftime,
 };
+
+static char *function_eval(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
+{
+       if (!data || ast_strlen_zero(data)) {
+               ast_log(LOG_WARNING, "EVAL requires an argument: EVAL(<variable>)\n");
+               return buf;
+       }
+       
+       pbx_substitute_variables_helper(chan, data, buf, len - 1);
+
+       return buf;
+}
+
+#ifndef BUILTIN_FUNC
+static
+#endif
+struct ast_custom_function eval_function = {
+       .name = "EVAL",
+       .synopsis = "Evaluate stored variables.",
+       .syntax = "EVAL(<variable>)",
+       .desc = "Using EVAL basically causes a string to be evaluated twice.\n"
+               "When a variable or expression is in the dialplan, it will be\n"
+               "evaluated at runtime. However, if the result of the evaluation\n"
+               "is in fact a variable or expression, using EVAL will have it\n"
+               "evaluated a second time. For example, if the variable ${MYVAR}\n"
+               "contains \"${OTHERVAR}\", then the result of putting ${EVAL(${MYVAR})}\n"
+               "in the dialplan will be the contents of the variable, OTHERVAR.\n"
+               "Normally, by just putting ${MYVAR} in the dialplan, you would be\n"
+               "left with \"${OTHERVAR}\".\n", 
+       .read = function_eval,
+};
+