qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] qemu_timedate_diff() shouldn't modify its argum


From: Gleb Natapov
Subject: Re: [Qemu-devel] [PATCH] qemu_timedate_diff() shouldn't modify its argument.
Date: Tue, 8 Nov 2011 09:36:31 +0200

On Mon, Nov 07, 2011 at 10:16:29PM +0200, Ronen Hod wrote:
> On 11/06/2011 06:00 PM, Gleb Natapov wrote:
> >The caller of qemu_timedate_diff() does not expect that tm it passes to
> >the function will be modified, but mktime() is destructive and modifies
> >its argument. Pass a copy of tm to it and set tm_isdst so that mktime()
> >will not rely on it since its value may be outdated.
> 
> I believe that the original issue was not related to outdated data
> at the moment of the daylight saving time transition.
Don't know what do you mean here. The problem is definitely related to
incorrect data about daylight saving time.

> using tmp.tm_isdst = -1 sounds good, but why use a copy of tm? The
Hmm, what is not clear about "qemu_timedate_diff() shouldn't modify its
 argument"? :) 

> only significant field that will change in the tm is the tm_isdst
> itself that will be set to 0/1 (correctly).
This is incorrect (read man), but event if it would breed a new kind of
especially handsome ponies, if this is what caller wants it should call
mktime() by itself and not be a side effect of some random function
call.

> 
> Acked-by: Ronen Hod <address@hidden>
> 
> >Signed-off-by: Gleb Natapov<address@hidden>
> >diff --git a/vl.c b/vl.c
> >index 624da0f..641629b 100644
> >--- a/vl.c
> >+++ b/vl.c
> >@@ -460,8 +460,11 @@ int qemu_timedate_diff(struct tm *tm)
> >      if (rtc_date_offset == -1)
> >          if (rtc_utc)
> >              seconds = mktimegm(tm);
> >-        else
> >-            seconds = mktime(tm);
> >+        else {
> >+            struct tm tmp = *tm;
> >+            tmp.tm_isdst = -1; /* use timezone to figure it out */
> >+            seconds = mktime(&tmp);
> >+    }
> >      else
> >          seconds = mktimegm(tm) + rtc_date_offset;
> >
> >--
> >                     Gleb.
> >

--
                        Gleb.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]