aboutsummaryrefslogtreecommitdiffstats
path: root/funcs
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-05 05:50:11 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-05-05 05:50:11 +0000
commitd02cf29997ee3579f4c057217acd9a602d68f90e (patch)
tree44191a6e74491b62236206ad9847910e3d388cee /funcs
parent6a262d98eeee9e0b4bfac92d88aacad6c4fab935 (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-xfuncs/func_strings.c54
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,
+};