X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftimedate%2Ftimedated.c;h=8fb7f6e806a785a1da052ef20ef0760f086ad28a;hp=2ead4b99993b91c44f099b0e25a52ee7d0bf8cf0;hb=afc6adb5ec7e73bc13156c43f52fb015cd80cc68;hpb=abc5fe72503fcc30998334e73c5d8e58f9a9d85e diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index 2ead4b999..8fb7f6e80 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -45,8 +45,8 @@ typedef struct Context { char *zone; bool local_rtc; - int can_ntp; - int use_ntp; + unsigned can_ntp; + unsigned use_ntp; Hashmap *polkit_registry; } Context; @@ -467,12 +467,14 @@ static int property_get_rtc_time( zero(tm); r = hwclock_get_time(&tm); - if (r < 0) { + if (r == -EBUSY) { + log_warning("/dev/rtc is busy, is somebody keeping it open continously? That's not a good idea... Returning a bogus RTC timestamp."); + t = 0; + } else if (r < 0) { sd_bus_error_set_errnof(error, -r, "Failed to read RTC: %s", strerror(-r)); return r; - } - - t = (usec_t) mktime(&tm) * USEC_PER_SEC; + } else + t = (usec_t) timegm(&tm) * USEC_PER_SEC; r = sd_bus_message_append(reply, "t", t); if (r < 0) @@ -521,7 +523,7 @@ static int method_set_timezone(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; Context *c = userdata; const char *z; - bool interactive; + int interactive; char *t; int r; @@ -585,7 +587,7 @@ static int method_set_timezone(sd_bus *bus, sd_bus_message *m, void *userdata) { static int method_set_local_rtc(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool lrtc, fix_system, interactive; + int lrtc, fix_system, interactive; Context *c = userdata; struct timespec ts; int r; @@ -669,7 +671,7 @@ static int method_set_local_rtc(sd_bus *bus, sd_bus_message *m, void *userdata) static int method_set_time(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool relative, interactive; + int relative, interactive; Context *c = userdata; int64_t utc; struct timespec ts; @@ -735,7 +737,7 @@ static int method_set_time(sd_bus *bus, sd_bus_message *m, void *userdata) { static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool ntp, interactive; + int ntp, interactive; Context *c = userdata; int r; @@ -743,7 +745,7 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata) { if (r < 0) return sd_bus_reply_method_errno(bus, m, r, NULL); - if (ntp == c->use_ntp) + if ((bool)ntp == c->use_ntp) return sd_bus_reply_method_return(bus, m, NULL); r = bus_verify_polkit_async(bus, &c->polkit_registry, m, "org.freedesktop.timedate1.set-ntp", interactive, &error, method_set_ntp, c); @@ -852,7 +854,7 @@ int main(int argc, char *argv[]) { goto finish; } - r = sd_event_new(&event); + r = sd_event_default(&event); if (r < 0) { log_error("Failed to allocate event loop: %s", strerror(-r)); goto finish;