From: Rafał Miłecki Date: Tue, 5 Jul 2016 13:40:56 +0000 (+0200) Subject: system: fix localtime value in ubus info method output X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3c771f9e4ba46d3e39334cb20eab98221043f1e2;p=oweals%2Fprocd.git system: fix localtime value in ubus info method output Function mktime respects current time zone and calling it results in converting time back to the UTC. It means we were never returning a time for local zone but GMT one. The easiest solution is to use tm_gmtoff from struct tm. Unfortunately this isn't part of POSIX but it seems to be the best idea anyway. Alternative (worse?) solutions: 1) Use timegm that is nonstandard GNU extension 2) Work with TZ env (getenv & (un)setenv) that is not thread-safe 3) Use timegm (next to localtime) and implement function comparing two struct tm. This is what glibc does internally (tm_diff) when compiled without HAVE_TM_GMTOFF. Signed-off-by: Rafał Miłecki --- diff --git a/system.c b/system.c index 504cdc0..569a75d 100644 --- a/system.c +++ b/system.c @@ -205,7 +205,7 @@ static int system_info(struct ubus_context *ctx, struct ubus_object *obj, blob_buf_init(&b, 0); - blobmsg_add_u32(&b, "localtime", mktime(tm)); + blobmsg_add_u32(&b, "localtime", now + tm->tm_gmtoff); #ifdef linux blobmsg_add_u32(&b, "uptime", info.uptime);