All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] libvhd: use UTC for VHD timestamp
@ 2013-08-30 13:07 Wei Liu
  2013-08-30 15:50 ` Wei Liu
  0 siblings, 1 reply; 4+ messages in thread
From: Wei Liu @ 2013-08-30 13:07 UTC (permalink / raw)
  To: xen-devel; +Cc: Wei Liu, ian.jackson, Andrei Lifchits

[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@citrix.com>

---
Add SoB for Andrei Lifchits.
Remove unused variable "tm".

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
 tools/blktap2/vhd/lib/libvhd.c |   33 +++++++++------------------------
 1 file 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)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] libvhd: use UTC for VHD timestamp
  2013-08-30 13:07 [PATCH] libvhd: use UTC for VHD timestamp Wei Liu
@ 2013-08-30 15:50 ` Wei Liu
  2013-08-30 15:52   ` Ian Jackson
  0 siblings, 1 reply; 4+ messages in thread
From: Wei Liu @ 2013-08-30 15:50 UTC (permalink / raw)
  To: xen-devel; +Cc: Wei Liu, ian.jackson, Andrei Lifchits

Update commit message.

------8<----
>From ba0fff2eac08a65e316149fc5e6464c9d175f247 Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@citrix.com>
Date: Fri, 30 Aug 2013 12:33:33 +0100
Subject: [PATCH] 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@citrix.com>

---
Add SoB for Andrei Lifchits. 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@citrix.com>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
 tools/blktap2/vhd/lib/libvhd.c |   33 +++++++++------------------------
 1 file 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)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] libvhd: use UTC for VHD timestamp
  2013-08-30 15:50 ` Wei Liu
@ 2013-08-30 15:52   ` Ian Jackson
  2013-09-03 16:32     ` Ian Campbell
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Jackson @ 2013-08-30 15:52 UTC (permalink / raw)
  To: Wei Liu; +Cc: Andrei Lifchits, xen-devel

Wei Liu writes ("Re: [PATCH] libvhd: use UTC for VHD timestamp"):
> Update commit message.

Thanks.

> From: Wei Liu <wei.liu2@citrix.com>
> Date: Fri, 30 Aug 2013 12:33:33 +0100
> Subject: [PATCH] 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.

The existing code here is, erm, "surprising".  Thanks for your
attention to it!

Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>

Ian.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] libvhd: use UTC for VHD timestamp
  2013-08-30 15:52   ` Ian Jackson
@ 2013-09-03 16:32     ` Ian Campbell
  0 siblings, 0 replies; 4+ messages in thread
From: Ian Campbell @ 2013-09-03 16:32 UTC (permalink / raw)
  To: Ian Jackson; +Cc: xen-devel, Wei Liu, Andrei Lifchits

On Fri, 2013-08-30 at 16:52 +0100, Ian Jackson wrote:
> Wei Liu writes ("Re: [PATCH] libvhd: use UTC for VHD timestamp"):
> > Update commit message.
> 
> Thanks.
> 
> > From: Wei Liu <wei.liu2@citrix.com>
> > Date: Fri, 30 Aug 2013 12:33:33 +0100
> > Subject: [PATCH] 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.
> 
> The existing code here is, erm, "surprising".  Thanks for your
> attention to it!
> 
> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>

Applied with the commit message formatted as:

    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@citrix.com>
    
    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@citrix.com>
    Signed-off-by: Wei Liu <wei.liu2@citrix.com>
    Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-09-03 16:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-30 13:07 [PATCH] libvhd: use UTC for VHD timestamp Wei Liu
2013-08-30 15:50 ` Wei Liu
2013-08-30 15:52   ` Ian Jackson
2013-09-03 16:32     ` Ian Campbell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.