summaryrefslogtreecommitdiff
path: root/vl.c
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2011-11-06 18:00:22 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2011-11-07 10:57:37 -0600
commitf54c556c08c57a317ad54f5d2d9ad549b931cda2 (patch)
tree293870306848da862733cd30edbf52995d5ee12f /vl.c
parent47113ab6b8c5659ad94c69aacca572f731ebb0ac (diff)
downloadqemu-f54c556c08c57a317ad54f5d2d9ad549b931cda2.tar.gz
qemu-f54c556c08c57a317ad54f5d2d9ad549b931cda2.tar.bz2
qemu-f54c556c08c57a317ad54f5d2d9ad549b931cda2.zip
qemu_timedate_diff() shouldn't modify its argument.
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. Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'vl.c')
-rw-r--r--vl.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/vl.c b/vl.c
index 624da0fd3c..641629b1ce 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;