[Asterisk-cvs] asterisk/funcs func_logic.c,1.5,1.6
kpfleming at lists.digium.com
kpfleming at lists.digium.com
Fri Jun 3 17:01:07 CDT 2005
Update of /usr/cvsroot/asterisk/funcs
In directory mongoose.digium.com:/tmp/cvs-serv10533/funcs
Modified Files:
func_logic.c
Log Message:
clean up logic functions code and help texts
add IFTIME function (bug #4394, with mods)
Index: func_logic.c
===================================================================
RCS file: /usr/cvsroot/asterisk/funcs/func_logic.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- func_logic.c 20 May 2005 16:30:13 -0000 1.5
+++ func_logic.c 3 Jun 2005 21:04:04 -0000 1.6
@@ -23,82 +23,114 @@
static char *builtin_function_isnull(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
- char *ret_true = "1", *ret_false = "0";
-
- return data && *data ? ret_false : ret_true;
+ return data && *data ? "0" : "1";
}
static char *builtin_function_exists(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
- char *ret_true = "1", *ret_false = "0";
+ return data && *data ? "1" : "0";
+}
- return data && *data ? ret_true : ret_false;
+static char *builtin_function_iftime(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+{
+ struct ast_timing timing;
+ char *ret;
+ char *expr;
+ char *iftrue;
+ char *iffalse;
+
+ if (!(data = ast_strdupa(data))) {
+ ast_log(LOG_WARNING, "Memory Error!\n");
+ return NULL;
+ }
+
+ data = ast_strip_quoted(data, "\"", "\"");
+ expr = strsep(&data, "?");
+ iftrue = strsep(&data, ":");
+ iffalse = data;
+
+ if (!expr || ast_strlen_zero(expr) || !(iftrue || iffalse)) {
+ ast_log(LOG_WARNING, "Syntax IFTIME(<timespec>?[<true>][:<false>])\n");
+ return NULL;
+ }
+
+ if (!ast_build_timing(&timing, expr)) {
+ ast_log(LOG_WARNING, "Invalid Time Spec.\n");
+ return NULL;
+ }
+
+ if (iftrue)
+ iftrue = ast_strip_quoted(iftrue, "\"", "\"");
+ if (iffalse)
+ iffalse = ast_strip_quoted(iffalse, "\"", "\"");
+
+ if ((ret = ast_check_timing(&timing) ? iftrue : iffalse)) {
+ ast_copy_string(buf, ret, len);
+ ret = buf;
+ }
+
+ return ret;
}
static char *builtin_function_if(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
- char *ret = NULL;
- char *mydata = NULL;
- char *expr = NULL;
- char *iftrue = NULL;
- char *iffalse = NULL;
+ char *ret;
+ char *expr;
+ char *iftrue;
+ char *iffalse;
- if((mydata = ast_strdupa(data))) {
- expr = mydata;
- if ((iftrue = strchr(mydata, '?'))) {
- *iftrue = '\0';
- iftrue++;
- if ((iffalse = strchr(iftrue, ':'))) {
- *iffalse = '\0';
- iffalse++;
- }
- }
+ if (!(data = ast_strdupa(data))) {
+ ast_log(LOG_WARNING, "Memory Error!\n");
+ return NULL;
+ }
- if (expr && iftrue) {
- expr = ast_strip_quoted(expr, "\"", "\"");
- iftrue = ast_strip_quoted(iftrue, "\"", "\"");
+ data = ast_strip_quoted(data, "\"", "\"");
+ expr = strsep(&data, "?");
+ iftrue = strsep(&data, ":");
+ iffalse = data;
- if (iffalse) {
- iffalse = ast_strip_quoted(iffalse, "\"", "\"");
- }
- ret = ast_true(expr) ? iftrue : iffalse;
- if (ret) {
- ast_copy_string(buf, ret, len);
- ret = buf;
- }
- } else {
- ast_log(LOG_WARNING, "Syntax $(if <expr>?[<truecond>][:<falsecond>])\n");
- ret = NULL;
- }
- } else {
- ast_log(LOG_WARNING, "Memory Error!\n");
- ret = NULL;
+ if (!expr || ast_strlen_zero(expr) || !(iftrue || iffalse)) {
+ ast_log(LOG_WARNING, "Syntax IF(<timespec>?[<true>][:<false>])\n");
+ return NULL;
}
+ if (iftrue)
+ iftrue = ast_strip_quoted(iftrue, "\"", "\"");
+ if (iffalse)
+ iffalse = ast_strip_quoted(iffalse, "\"", "\"");
+
+ if ((ret = ast_true(expr) ? iftrue : iffalse)) {
+ ast_copy_string(buf, ret, len);
+ ret = buf;
+ }
+
return ret;
}
static char *builtin_function_set(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
- char *ret = NULL, *varname, *val;
+ char *varname;
+ char *val;
- if ((varname = ast_strdupa(data))) {
- if ((val = strchr(varname, '='))) {
- *val = '\0';
- val++;
- varname = ast_strip(varname);
- val = ast_strip(val);
- pbx_builtin_setvar_helper(chan, varname, val);
- ast_copy_string(buf, val, len);
- } else {
- ast_log(LOG_WARNING, "Syntax Error!\n");
- }
-
- } else {
- ast_log(LOG_WARNING, "Memory Error!\n");
- }
+ if (!(data = ast_strdupa(data))) {
+ ast_log(LOG_WARNING, "Memory Error!\n");
+ return NULL;
+ }
- return ret;
+ varname = strsep(&data, "=");
+ val = data;
+
+ if (!varname || ast_strlen_zero(varname) || !val) {
+ ast_log(LOG_WARNING, "Syntax SET(<varname>=[<value>])\n");
+ return NULL;
+ }
+
+ varname = ast_strip(varname);
+ val = ast_strip(val);
+ pbx_builtin_setvar_helper(chan, varname, val);
+ ast_copy_string(buf, val, len);
+
+ return buf;
}
#ifndef BUILTIN_FUNC
@@ -116,8 +148,8 @@
#endif
struct ast_custom_function set_function = {
.name = "SET",
- .synopsis = "SET assigns a value to a function call.",
- .syntax = "SET(<varname>=<value>)",
+ .synopsis = "SET assigns a value to a channel variable",
+ .syntax = "SET(<varname>=[<value>])",
.read = builtin_function_set,
};
@@ -137,6 +169,17 @@
struct ast_custom_function if_function = {
.name = "IF",
.synopsis = "Conditional: Returns the data following '?' if true else the data following ':'",
- .syntax = "IF(<expr>?<true>:<false>)",
+ .syntax = "IF(<expr>?[<true>][:<false>])",
.read = builtin_function_if,
};
+
+
+#ifndef BUILTIN_FUNC
+static
+#endif
+struct ast_custom_function if_time_function = {
+ .name = "IFTIME",
+ .synopsis = "Temporal Conditional: Returns the data following '?' if true else the data following ':'",
+ .syntax = "IFTIME(<timespec>?[<true>][:<false>])",
+ .read = builtin_function_iftime,
+};
More information about the svn-commits
mailing list