Skip to content

Commit

Permalink
Merge branch 'mg/unsigned-time-t'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
gitster committed Mar 25, 2013
2 parents edb99f9 + e1033da commit f10a012
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions date.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit f10a012

Please sign in to comment.