diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-03-25 14:00:56 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-03-25 14:00:56 -0700 |
commit | f10a012088a7b6e418ec3f726142a8ddfa3d0264 (patch) | |
tree | 0c422f8fa659196e9e0cc22ce7756bafa9ad0c13 | |
parent | Merge branch 'jk/suppress-clang-warning' (diff) | |
parent | Fix time offset calculation in case of unsigned time_t (diff) | |
download | tgif-f10a012088a7b6e418ec3f726142a8ddfa3d0264.tar.xz |
Merge branch 'mg/unsigned-time-t'
A few workarounds for systems with unsigned time_t.
* mg/unsigned-time-t:
Fix time offset calculation in case of unsigned time_t
date.c: fix unsigned time_t comparison
-rw-r--r-- | date.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -383,7 +383,7 @@ static int is_date(int year, int month, int day, struct tm *now_tm, time_t now, * sense to specify timestamp way into the future. Make * sure it is not later than ten days from now... */ - if (now + 10*24*3600 < specified) + if ((specified != -1) && (now + 10*24*3600 < specified)) return 0; tm->tm_mon = r->tm_mon; tm->tm_mday = r->tm_mday; @@ -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; |