aboutsummaryrefslogtreecommitdiffstats
path: root/plugin_time.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugin_time.c')
-rw-r--r--plugin_time.c43
1 files changed, 40 insertions, 3 deletions
diff --git a/plugin_time.c b/plugin_time.c
index 7a56b3b..324f5b8 100644
--- a/plugin_time.c
+++ b/plugin_time.c
@@ -1,9 +1,9 @@
-/* $Id: plugin_time.c 728 2007-01-14 11:14:38Z michael $
- * $URL: https://ssl.bulix.org/svn/lcd4linux/branches/0.10.1/plugin_time.c $
+/* $Id: plugin_time.c 897 2008-10-06 04:25:14Z michael $
+ * $URL: https://ssl.bulix.org/svn/lcd4linux/trunk/plugin_time.c $
*
* time plugin
*
- * Copyright (C) 2003, 2004 Michael Reinelt <reinelt@eunet.at>
+ * Copyright (C) 2003, 2004 Michael Reinelt <michael@reinelt.co.at>
* Copyright (C) 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
*
* This file is part of LCD4Linux.
@@ -36,6 +36,8 @@
#include "config.h"
#include <time.h>
+#include <stdlib.h>
+#include <string.h>
#include "debug.h"
#include "plugin.h"
@@ -59,6 +61,40 @@ static void my_strftime(RESULT * result, RESULT * arg1, RESULT * arg2)
SetResult(&result, R_STRING, value);
}
+static void my_stftime_tz(RESULT * result, RESULT * arg1, RESULT * arg2, RESULT * arg3)
+{
+ char value[256] = "";
+ time_t t = R2N(arg2);
+ char *tz = R2S(arg3);
+ char *old_tz;
+
+ old_tz = getenv("TZ");
+
+ /*
+ * because the next setenv() call may overwrite that string, we
+ * duplicate it here
+ */
+ if (old_tz) {
+ old_tz = strdup(old_tz);
+ }
+
+ setenv("TZ", tz, 1);
+ tzset();
+
+ strftime(value, sizeof(value), R2S(arg1), localtime(&t));
+
+ if (old_tz) {
+ setenv("TZ", old_tz, 1);
+ } else {
+ unsetenv("TZ");
+ }
+ tzset();
+
+ free(old_tz);
+
+ SetResult(&result, R_STRING, value);
+}
+
int plugin_init_time(void)
{
@@ -66,6 +102,7 @@ int plugin_init_time(void)
/* register some basic time functions */
AddFunction("time", 0, my_time);
AddFunction("strftime", 2, my_strftime);
+ AddFunction("strftime_tz", 3, my_stftime_tz);
return 0;
}