aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkremlin <ian@kremlin.cc>2014-08-26 03:56:50 +0800
committerkremlin <ian@kremlin.cc>2014-08-26 03:56:50 +0800
commit1066bd3646e52f012fe2145eb92070f25ee6332e (patch)
tree9dcbf7b1699445281fec3233987802e48affdc42
parenta3d2e50f33b4a595ff5fe44ed1d28de03d3da22d (diff)
downloadsystembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.tar
systembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.tar.gz
systembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.tar.bz2
systembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.tar.lz
systembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.tar.xz
systembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.tar.zst
systembsd-1066bd3646e52f012fe2145eb92070f25ee6332e.zip
begin get_timezone(), begin get_timezone_path() util func
-rw-r--r--src/interfaces/timedated/timedated.c56
-rw-r--r--src/interfaces/timedated/timedated.h2
2 files changed, 57 insertions, 1 deletions
diff --git a/src/interfaces/timedated/timedated.c b/src/interfaces/timedated/timedated.c
index 87b5392..56f62b2 100644
--- a/src/interfaces/timedated/timedated.c
+++ b/src/interfaces/timedated/timedated.c
@@ -24,6 +24,7 @@
#include <glib/gprintf.h>
#include <glib-unix.h>
+#include <glib/gstdio.h>
#include <polkit/polkit.h>
#include "timedated-gen.h"
@@ -39,6 +40,9 @@ GMainLoop *timedated_loop;
guint bus_descriptor;
gboolean dbus_interface_exported; /* reliable because of gdbus operational guarantees */
+const gchar *OS_LOCALTIME = "/etc/localtime"; /* current timezone file */
+const gchar *OS_TIMEZONE_PATH = "/usr/share/zoneinfo"; /* path to system timezone files */
+
/* --- begin method/property/dbus signal code --- */
static gboolean
@@ -76,7 +80,34 @@ on_handle_set_ntp(Timedate1 *hn1_passed_interf,
const gchar *
our_get_timezone() {
- return "";
+ GStatBuf *stat_zoneinfo;
+ gchar *find_cmd, *readlink_path, *ret;
+ GError *err = NULL;
+
+ find_cmd = (gchar *) g_malloc0(2048);
+ stat_zoneinfo = (GStatBuf*) g_malloc0(8192);
+
+ if(g_stat(OS_LOCALTIME, stat_zoneinfo)) {
+
+ g_printf("could not read from %s! please symlink or copy a timezone file from %s to %s!\n", OS_LOCALTIME, OS_TIMEZONE_PATH, OS_LOCALTIME);
+ ret = NULL;
+
+ } else if(g_file_test(OS_LOCALTIME, G_FILE_TEST_IS_SYMLINK)) {
+
+ readlink_path = g_file_read_link(OS_LOCALTIME, &err);
+ ret = parse_timezone_path(readlink_path);
+
+ if(readlink_path)
+ g_free(readlink_path);
+
+ } else {
+
+ g_printf("%s is not a symlink! attempting to match checksums in %s...\n", OS_LOCALTIME, OS_TIMEZONE_PATH);
+ g_sprintf(find_cmd, "find %s -type f", OS_TIMEZONE_PATH);
+ ret = NULL;
+ }
+
+ return ret;
}
gboolean
@@ -249,3 +280,26 @@ int main() {
return 0;
}
+
+static gchar *parse_timezone_path(gchar *full_path) {
+
+ gchar *prefix_pattern;
+ GRegex *prefix, *posix, *right;
+ GError *err = NULL;
+
+ if(!full_path)
+ return NULL;
+
+ prefix_pattern = (gchar *) g_malloc0(4096);
+ g_sprintf(prefix_pattern, "^%s/$", OS_TIMEZONE_PATH);
+
+ prefix = g_regex_new(prefix_pattern, 0, 0, &err);
+ posix = g_regex_new("^posix/$", 0, 0, &err);
+ right = g_regex_new("^right/$", 0, 0, &err);
+
+ g_regex_unref(prefix);
+ g_regex_unref(right);
+ g_regex_unref(posix);
+
+ return NULL; /* TODO temp */
+}
diff --git a/src/interfaces/timedated/timedated.h b/src/interfaces/timedated/timedated.h
index 8f76651..693106a 100644
--- a/src/interfaces/timedated/timedated.h
+++ b/src/interfaces/timedated/timedated.h
@@ -15,3 +15,5 @@
*/
void timedated_mem_clean();
+static gchar *parse_timezone_path(gchar *full_path);
+