[PATCH 1/1] Fix time offset calculation in case of unsigned time_t
From: Mike Gorchak <hidden>
Date: 2016-06-15 22:56:15
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Mike Gorchak <hidden>
Date: 2016-06-15 22:56:15
Subsystem:
the rest · Maintainer:
Linus Torvalds
Fix time offset calculation expression in case if time_t is unsigned. This code works fine for signed and unsigned time_t. Signed-off-by: Mike Gorchak <redacted> --- date.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/date.c b/date.c
index 1ac28e5..11ee7b4 100644
--- a/date.c
+++ b/date.c@@ -648,6 +648,7 @@ int parse_date_basic(const char *date, unsignedlong *timestamp, int *offset) struct tm tm; int tm_gmt; unsigned long dummy_timestamp; + time_t temp_time; int dummy_offset; if (!timestamp)
@@ -694,8 +695,14 @@ int parse_date_basic(const char *date, unsignedlong *timestamp, int *offset)
/* mktime uses local timezone */
*timestamp = tm_to_time_t(&tm);
- if (*offset == -1)
- *offset = ((time_t)*timestamp - mktime(&tm)) / 60;
+ if (*offset == -1) {
+ temp_time = mktime(&tm);
+ if ((time_t)*timestamp > temp_time) {
+ *offset = ((time_t)*timestamp - temp_time) / 60;
+ } else {
+ *offset = -(int)((temp_time - (time_t)*timestamp) / 60);
+ }
+ }
if (*timestamp == -1)
return -1;
--
1.8.2-rc0