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: Ronen Hod
Subject: Re: [Qemu-devel] [PATCH] qemu_timedate_diff() shouldn't modify its argument.
Date: Mon, 07 Nov 2011 22:16:29 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110928 Fedora/3.1.15-1.fc14 Thunderbird/3.1.15

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. using tmp.tm_isdst = -1 sounds good, but why use a copy of tm? The only significant field that will change in the tm is the tm_isdst itself that will be set to 0/1 (correctly).

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.





reply via email to

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