chiark / gitweb /
timedated: unregister the right bus service
[elogind.git] / src / timedate / timedated.c
index acfb507548aad462736391230bae0ceb292c7a4a..0ebdb3c47776216b25a3c86f95a7c3720766f3db 100644 (file)
@@ -176,20 +176,20 @@ static int read_data(void) {
                 }
         }
 
-#ifdef HAVE_SYSV_COMPAT
+#ifdef TARGET_FEDORA
+        r = parse_env_file("/etc/sysconfig/clock", NEWLINE,
+                           "ZONE", &tz.zone,
+                           NULL);
+
+        if (r < 0 && r != -ENOENT)
+                log_warning("Failed to read /etc/sysconfig/clock: %s", strerror(-r));
+#endif
+
+#ifdef HAVE_DEBIAN
         r = read_one_line_file("/etc/timezone", &tz.zone);
         if (r < 0) {
                 if (r != -ENOENT)
                         log_warning("Failed to read /etc/timezone: %s", strerror(-r));
-
-#ifdef TARGET_FEDORA
-                r = parse_env_file("/etc/sysconfig/clock", NEWLINE,
-                                   "ZONE", &tz.zone,
-                                   NULL);
-
-                if (r < 0 && r != -ENOENT)
-                        log_warning("Failed to read /etc/sysconfig/clock: %s", strerror(-r));
-#endif
         }
 #endif
 
@@ -207,13 +207,16 @@ have_timezone:
 static int write_data_timezone(void) {
         int r = 0;
         _cleanup_free_ char *p = NULL;
+
+#ifdef TARGET_DEBIAN
         struct stat st;
+#endif
 
         if (!tz.zone) {
                 if (unlink("/etc/localtime") < 0 && errno != ENOENT)
                         r = -errno;
 
-#ifdef HAVE_SYSV_COMPAT
+#ifdef TARGET_DEBIAN
                 if (unlink("/etc/timezone") < 0 && errno != ENOENT)
                         r = -errno;
 #endif
@@ -229,7 +232,7 @@ static int write_data_timezone(void) {
         if (r < 0)
                 return r;
 
-#ifdef HAVE_SYSV_COMPAT
+#ifdef TARGET_DEBIAN
         if (stat("/etc/timezone", &st) == 0 && S_ISREG(st.st_mode)) {
                 r = write_one_line_file_atomic("/etc/timezone", tz.zone);
                 if (r < 0)
@@ -693,13 +696,13 @@ static DBusHandlerResult timedate_message_handler(
                                 return bus_send_error_reply(connection, message, NULL, r);
                         }
 
+                        /* 2. Tell the kernel our time zone */
+                        hwclock_set_timezone(NULL);
+
                         if (tz.local_rtc) {
                                 struct timespec ts;
                                 struct tm *tm;
 
-                                /* 2. Teach kernel new timezone */
-                                hwclock_apply_localtime_delta(NULL);
-
                                 /* 3. Sync RTC from system clock, with the new delta */
                                 assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
                                 assert_se(tm = localtime(&ts.tv_sec));
@@ -750,11 +753,8 @@ static DBusHandlerResult timedate_message_handler(
                                 return bus_send_error_reply(connection, message, NULL, r);
                         }
 
-                        /* 2. Teach kernel new timezone */
-                        if (tz.local_rtc)
-                                hwclock_apply_localtime_delta(NULL);
-                        else
-                                hwclock_reset_localtime_delta();
+                        /* 2. Tell the kernel our time zone */
+                        hwclock_set_timezone(NULL);
 
                         /* 3. Synchronize clocks */
                         assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
@@ -1032,7 +1032,7 @@ int main(int argc, char *argv[]) {
 
                 if (!exiting && remain_until < now(CLOCK_MONOTONIC)) {
                         exiting = true;
-                        bus_async_unregister_and_exit(bus, "org.freedesktop.hostname1");
+                        bus_async_unregister_and_exit(bus, "org.freedesktop.timedated1");
                 }
         }