Skip to content

Commit 3e127f8

Browse files
committed
fix leap year calculation and remove now-unnecessary timestamp limit
1 parent 60f3f52 commit 3e127f8

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

date.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ time_t tm_to_time_t(const struct tm *tm)
2424
int month = tm->tm_mon;
2525
int day = tm->tm_mday;
2626

27-
if (year < 0 || year > 129) /* algo only works for 1970-2099 */
27+
if (year < 0) /* algo only works for 1970+ */
2828
return -1;
2929
if (month < 0 || month > 11) /* array bounds */
3030
return -1;
@@ -33,6 +33,7 @@ time_t tm_to_time_t(const struct tm *tm)
3333
if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_sec < 0)
3434
return -1;
3535
return (year * 365 + (year + 1) / 4 + mdays[month] + day) * 24*60*60UL +
36+
(year + 369) / 400 - (year + 69) / 100 +
3637
tm->tm_hour * 60*60 + tm->tm_min * 60 + tm->tm_sec;
3738
}
3839

@@ -526,7 +527,7 @@ static int set_date(int year, int month, int day, struct tm *now_tm, time_t now,
526527
return 1;
527528
r->tm_year = now_tm->tm_year;
528529
}
529-
else if (year >= 1970 && year < 2100)
530+
else if (year >= 1970)
530531
r->tm_year = year - 1900;
531532
else if (year > 70 && year < 100)
532533
r->tm_year = year;
@@ -871,8 +872,8 @@ static int match_object_header_date(const char *date, timestamp_t *timestamp, in
871872
}
872873

873874

874-
/* timestamp of 2099-12-31T23:59:59Z, including 32 leap days */
875-
static const timestamp_t timestamp_max = (((timestamp_t)2100 - 1970) * 365 + 32) * 24 * 60 * 60 - 1;
875+
/* timestamp of max time */
876+
static const timestamp_t timestamp_max = UINTMAX_MAX;
876877

877878
/* Gr. strptime is crap for this; it doesn't have a way to require RFC2822
878879
(i.e. English) day/month names, and it doesn't work correctly with %z. */

0 commit comments

Comments
 (0)