diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-05 05:50:11 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-05 05:50:11 +0000 |
commit | d02cf29997ee3579f4c057217acd9a602d68f90e (patch) | |
tree | 44191a6e74491b62236206ad9847910e3d388cee /funcs | |
parent | 6a262d98eeee9e0b4bfac92d88aacad6c4fab935 (diff) |
add STRFTIME dialplan function (bug #4098, modified to use new funcs subdirectory)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5584 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs')
-rwxr-xr-x | funcs/func_strings.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/funcs/func_strings.c b/funcs/func_strings.c index b70fbfeb8..61cef2625 100755 --- a/funcs/func_strings.c +++ b/funcs/func_strings.c @@ -19,6 +19,7 @@ #include "asterisk/logger.h" #include "asterisk/utils.h" #include "asterisk/app.h" +#include "asterisk/localtime.h" static char *function_fieldqty(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { @@ -115,3 +116,56 @@ struct ast_custom_function len_function = { .syntax = "LEN(<string>)", .read = builtin_function_len, }; + +static char *acf_strftime(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + char *format, *epoch, *timezone; + long epochi; + struct timeval tv; + struct tm time; + + if (data) { + format = ast_strdupa(data); + if (format) { + epoch = strsep(&format, "|"); + timezone = strsep(&format, "|"); + + if (epoch && !ast_strlen_zero(epoch) && sscanf(epoch, "%ld", &epochi) == 1) { + } else if (!gettimeofday(&tv, NULL)) { + epochi = tv.tv_sec; + } else { + ast_log(LOG_ERROR, "Cannot gettimeofday() ?!!\n"); + return ""; + } + + ast_localtime(&epochi, &time, timezone); + + if (!format) { + format = "%c"; + } + + buf[0] = '\0'; + if (! strftime(buf, len, format, &time)) { + ast_log(LOG_WARNING, "C function strftime() output nothing?!!\n"); + } + buf[len - 1] = '\0'; + + return buf; + } else { + ast_log(LOG_ERROR, "Out of memory\n"); + } + } else { + ast_log(LOG_ERROR, "Asterisk function STRFTIME() requires an argument.\n"); + } + return ""; +} + +#ifndef BUILTIN_FUNC +static +#endif +struct ast_custom_function strftime_function = { + .name = "STRFTIME", + .synopsis = "Returns the current date/time in a specified format.", + .syntax = "STRFTIME([<epoch>][,[timezone][,format]])", + .read = acf_strftime, +}; |