diff options
author | kib <kib@FreeBSD.org> | 2014-12-19 09:34:14 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-12-19 09:34:14 +0000 |
commit | bf071386224cba73f4bec31a49ad96bc73e96677 (patch) | |
tree | 7f5589c7521a1df111df092ff36776287d8fbeff /sys/kern/subr_clock.c | |
parent | eac5956a91676b1404b6076db57f80d70eaef17e (diff) | |
download | FreeBSD-src-bf071386224cba73f4bec31a49ad96bc73e96677.zip FreeBSD-src-bf071386224cba73f4bec31a49ad96bc73e96677.tar.gz |
MFC r275727:
For architectures where time_t is wide enough, in particular, 64bit
platforms, avoid overflow after year 2038 in clock_ct_to_ts().
PR: 195868
Diffstat (limited to 'sys/kern/subr_clock.c')
-rw-r--r-- | sys/kern/subr_clock.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/kern/subr_clock.c b/sys/kern/subr_clock.c index f30f529..05de5b9 100644 --- a/sys/kern/subr_clock.c +++ b/sys/kern/subr_clock.c @@ -133,7 +133,6 @@ print_ct(struct clocktime *ct) int clock_ct_to_ts(struct clocktime *ct, struct timespec *ts) { - time_t secs; int i, year, days; year = ct->year; @@ -167,11 +166,10 @@ clock_ct_to_ts(struct clocktime *ct, struct timespec *ts) days += days_in_month(year, i); days += (ct->day - 1); - /* Add hours, minutes, seconds. */ - secs = ((days * 24 + ct->hour) * 60 + ct->min) * 60 + ct->sec; - - ts->tv_sec = secs; + ts->tv_sec = (((time_t)days * 24 + ct->hour) * 60 + ct->min) * 60 + + ct->sec; ts->tv_nsec = ct->nsec; + if (ct_debug) printf(" = %ld.%09ld\n", (long)ts->tv_sec, (long)ts->tv_nsec); return (0); |