From: Mike Gorchak Date: Mon, 25 Feb 2013 21:53:40 +0000 (+0200) Subject: Fix time offset calculation in case of unsigned time_t X-Git-Tag: v1.8.3-rc0~176^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/e1033da6af80b77d720ba7df9b8d3439666582e4?ds=inline;hp=--cc Fix time offset calculation in case of unsigned time_t 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 Signed-off-by: Junio C Hamano --- e1033da6af80b77d720ba7df9b8d3439666582e4 diff --git a/date.c b/date.c index 1ac28e5e7b..df20d0ba1d 100644 --- a/date.c +++ b/date.c @@ -694,8 +694,14 @@ int parse_date_basic(const char *date, unsigned long *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) { + time_t 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;