[LEDE-DEV] [PATCH procd] system: fix localtime value in ubus info method output
Rafał Miłecki
zajec5 at gmail.com
Mon Jul 4 02:15:33 PDT 2016
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 <zajec5 at gmail.com>
---
system.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/system.c b/system.c
index fb7fbe4..d1b8ac0 100644
--- a/system.c
+++ b/system.c
@@ -202,7 +202,7 @@ static int system_info(struct ubus_context *ctx, struct ubus_object *obj,
blob_buf_init(&b, 0);
blobmsg_add_u32(&b, "uptime", info.uptime);
- blobmsg_add_u32(&b, "localtime", mktime(tm));
+ blobmsg_add_u32(&b, "localtime", now + tm->tm_gmtoff);
c = blobmsg_open_array(&b, "load");
blobmsg_add_u32(&b, NULL, info.loads[0]);
--
1.8.4.5
More information about the Lede-dev
mailing list