Skip to content

Commit e1033da

Browse files
llmikegitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e6e8751 commit e1033da

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

date.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,8 +694,14 @@ int parse_date_basic(const char *date, unsigned long *timestamp, int *offset)
694694

695695
/* mktime uses local timezone */
696696
*timestamp = tm_to_time_t(&tm);
697-
if (*offset == -1)
698-
*offset = ((time_t)*timestamp - mktime(&tm)) / 60;
697+
if (*offset == -1) {
698+
time_t temp_time = mktime(&tm);
699+
if ((time_t)*timestamp > temp_time) {
700+
*offset = ((time_t)*timestamp - temp_time) / 60;
701+
} else {
702+
*offset = -(int)((temp_time - (time_t)*timestamp) / 60);
703+
}
704+
}
699705

700706
if (*timestamp == -1)
701707
return -1;

0 commit comments

Comments
 (0)