[LEDE-DEV] [PATCH procd] system: fix localtime value in ubus info method output

John Crispin john at phrozen.org
Tue Jul 5 01:23:12 PDT 2016



On 04/07/2016 11:15, Rafał Miłecki wrote:
> 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]);
> 

Hi,

seems you used an older tree. this patch does not apply due to commit
f355e233714e ("add ifdefs to make system.c compile on non-linux systems")

	John



More information about the Lede-dev mailing list