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

[Xen-changelog] [xen master] libvhd: use UTC for VHD timestamp



commit 3fc8cabb8ab704324b4739b6772fcaaa69bbc3b9
Author:     Wei Liu <wei.liu2@xxxxxxxxxx>
AuthorDate: Fri Aug 30 12:33:33 2013 +0100
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Tue Sep 3 17:00:31 2013 +0100

    libvhd: use UTC for VHD timestamp
    
    [ported from xapi-project/blktap a79ac2c05f9 ("XOP-289: use UTC for VHD
    timestamps")]
    
    Currently, the local timezone is factored into VHD timestamps due to the
    use of mktime(). This breaks "vhd-util check" for VHDs created in one
    timezone and then moved westward, which results in "primary footer
    invalid: creation time in future" errors.
    
    Signed-off-by: Andrei Lifchits <andrei.lifchits@xxxxxxxxxx>
    
    Andrei no longer works for Citrix but Germano Percossi (ex-colleague of
    Andrei) contacted Andrei and confirmed that
      1) this work was written on Citrix time,
      2) it is OK to have Andrei's SoB.
    
    Remove unused variable "tm".
    
    Signed-off-by: Germano Percossi <germano.percossi@xxxxxxxxxx>
    Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
    Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
 tools/blktap2/vhd/lib/libvhd.c |   33 +++++++++------------------------
 1 files changed, 9 insertions(+), 24 deletions(-)

diff --git a/tools/blktap2/vhd/lib/libvhd.c b/tools/blktap2/vhd/lib/libvhd.c
index 3511cb4..95eb5d6 100644
--- a/tools/blktap2/vhd/lib/libvhd.c
+++ b/tools/blktap2/vhd/lib/libvhd.c
@@ -41,6 +41,10 @@
 #include "libvhd.h"
 #include "relative-path.h"
 
+/* VHD uses an epoch of 12:00AM, Jan 1, 2000. This is the Unix timestamp for
+ * the start of the VHD epoch. */
+#define VHD_EPOCH_START 946684800
+
 static int libvhd_dbg = 0;
 
 void
@@ -694,19 +698,10 @@ vhd_end_of_data(vhd_context_t *ctx, off_t *end)
        return 0;
 }
 
-uint32_t
+uint32_t inline
 vhd_time(time_t time)
 {
-       struct tm tm;
-       time_t micro_epoch;
-
-       memset(&tm, 0, sizeof(struct tm));
-       tm.tm_year   = 100;
-       tm.tm_mon    = 0;
-       tm.tm_mday   = 1;
-       micro_epoch  = mktime(&tm);
-
-       return (uint32_t)(time - micro_epoch);
+       return (uint32_t)(time - VHD_EPOCH_START);
 }
 
 /* 
@@ -717,20 +712,10 @@ size_t
 vhd_time_to_string(uint32_t timestamp, char *target)
 {
        char *cr;
-       struct tm tm;
-       time_t t1, t2;
-
-       memset(&tm, 0, sizeof(struct tm));
-
-       /* VHD uses an epoch of 12:00AM, Jan 1, 2000.         */
-       /* Need to adjust this to the expected epoch of 1970. */
-       tm.tm_year  = 100;
-       tm.tm_mon   = 0;
-       tm.tm_mday  = 1;
+       time_t unix_timestamp;
 
-       t1 = mktime(&tm);
-       t2 = t1 + (time_t)timestamp;
-       ctime_r(&t2, target);
+       unix_timestamp = (time_t)timestamp + VHD_EPOCH_START;
+       ctime_r(&unix_timestamp, target);
 
        /* handle mad ctime_r newline appending. */
        if ((cr = strchr(target, '\n')) != NULL)
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.