diff options
author | Mike Gorchak <mike.gorchak.qnx@gmail.com> | 2013-02-25 23:53:40 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-02-25 14:29:12 -0800 |
commit | e1033da6af80b77d720ba7df9b8d3439666582e4 (patch) | |
tree | e14f11d40ac27dd6dedf267062a657b94946967f /date.c | |
parent | e6e87516f569c2344f760287aec66f70da856c6d (diff) | |
download | git-e1033da6af80b77d720ba7df9b8d3439666582e4.tar.gz |
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 <mike.gorchak.qnx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'date.c')
-rw-r--r-- | date.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -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; |