[systemd-devel] [PATCH] timedated: Add a LocalOffset property for timezone offset
Shawn Landden
shawnlandden at gmail.com
Mon Mar 23 04:11:18 PDT 2015
On Sun, Mar 22, 2015 at 10:32 PM, Lennart Poettering
<lennart at poettering.net> wrote:
> On Thu, 19.03.15 14:39, David Herrmann (dh.herrmann at gmail.com) wrote:
>
>> Hmm, so this is a convenience call. You could just set tm.tm_zone
>> locally and use mktime() with the value retrieved by "Timezone"? Yeah,
>> the time-api is awful with global variables, but that's not really our
>> fault, is it?
>
> This would not work, as struct tm's .tm_zone field is not sufficient
> to indicate a timezone. The code would have to set $TZ and call tzset().
>
> Given the simplicity of this I'd probably just merge Stef's
> patch... It *is* kinda nice given that the timezone database is
> constantly updated and having this exposed on the bus so that it is
> accessible remotely has the benefit that you get the actual timezone
> information in effect on the remote system, and not a possible
> out-of-date timezone from the local database. If you follow what I mean...
The patch is COMPLETELY WRONG, as timezone offsets are differn't for
differn't times due to DST. Even if this is taken into account there
are all sorts of races
with this information around DST switches.
How about a
"LocalTimeUSec" property, for those times that the application doesn't
have an interest doing timezone calculations and just wants the local
time on the other machine. In any other case I think the client has to
do proper timezone calculations.
I could write a patch for a "TZDataVersion" field that holds the tzdata release.
>
>>
>> I'm not really against this bus-call, but I also don't see the point.
>> There's much more information in a timezone file than the offset, so
>> why expose the offset but not the other data?
>>
>> Thanks
>> David
>>
>> > static int property_get_ntp_sync(
>> > sd_bus *bus,
>> > const char *path,
>> > @@ -440,7 +456,8 @@ static int method_set_timezone(sd_bus *bus, sd_bus_message *m, void *userdata, s
>> > LOG_MESSAGE("Changed time zone to '%s'.", c->zone),
>> > NULL);
>> >
>> > - sd_bus_emit_properties_changed(bus, "/org/freedesktop/timedate1", "org.freedesktop.timedate1", "Timezone", NULL);
>> > + sd_bus_emit_properties_changed(bus, "/org/freedesktop/timedate1", "org.freedesktop.timedate1",
>> > + "Timezone", "LocalOffset", NULL);
>> >
>> > return sd_bus_reply_method_return(m, NULL);
>> > }
>> > @@ -666,6 +683,7 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus
>> > static const sd_bus_vtable timedate_vtable[] = {
>> > SD_BUS_VTABLE_START(0),
>> > SD_BUS_PROPERTY("Timezone", "s", NULL, offsetof(Context, zone), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
>> > + SD_BUS_PROPERTY("LocalOffset", "t", property_get_local_offset, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
>> > SD_BUS_PROPERTY("LocalRTC", "b", bus_property_get_bool, offsetof(Context, local_rtc), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
>> > SD_BUS_PROPERTY("CanNTP", "b", bus_property_get_bool, offsetof(Context, can_ntp), 0),
>> > SD_BUS_PROPERTY("NTP", "b", bus_property_get_bool, offsetof(Context, use_ntp), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
>> > --
>> > 2.3.3
>> >
>> > _______________________________________________
>> > systemd-devel mailing list
>> > systemd-devel at lists.freedesktop.org
>> > http://lists.freedesktop.org/mailman/listinfo/systemd-devel
>> _______________________________________________
>> systemd-devel mailing list
>> systemd-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
>
>
> Lennart
>
> --
> Lennart Poettering, Red Hat
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
Liberty equality fraternity or death,
Shawn Landden
ChurchOfGit.com
More information about the systemd-devel
mailing list