[U-Boot-Users] Is this a bug? /rtc/date.c
Robin Getz
rgetz at blackfin.uclinux.org
Sun Oct 10 10:17:10 CEST 2004
For architectures/boards which use the to_tm function in /rtc/date.c (which
is alot)
Dates up to 19Jan2038 03:14:08 work fine, but dates after don't:
BOOT> date 011903142038
Date: 2038-01-19 (Tuesday) Time: 3:14:01
BOOT> date
Date: 2038-01-19 (Tuesday) Time: 3:14:03
BOOT> date
Date: 2038-01-19 (Tuesday) Time: 3:14:04
BOOT> date
Date: 2038-01-19 (Tuesday) Time: 3:14:06
BOOT> date
Date: 1970-01--24854 (Saturday) Time: -3:-14:-7
BOOT> date
Date: 1970-01--24854 (Saturday) Time: -3:-14:-3
BOOT> date
Date: 1970-01--24854 (Saturday) Time: -3:-13:-59
This is due to the file the function math, or definition, depending
what/where you think the bug is. (or if you think it is a bug at all).
void to_tm(int tim, struct rtc_time * tm)
because tim is a signed int, dates past 19Jan2038 03:14:08 show up as 1970
with negative days/hours. (ie. the date of 01jan2039 shows up
as 1970-01--24507 (Wednesday) Time: -5:-27:-15)
Potential solutions:
1) fix math, so negative years show up as years : dates can be set from
1902 to 2038 : 102 years ago, to 34 years in the future).
OR
2) change function to be defined as:
void to_tm(unsigned int tim, struct rtc_time * tm)
which allows things to work until 2106, with existing math.
OR
3) leave it alone, by 2010 everyone will have moved to 64-bit time_t, and
things will be OK.
OR
4) error if someone tries to set the date past 19Jan2038 03:14:08 (this is
what Suse 9.0 does). I never checked to see what happens if I let Linux
roll over - I didn't feel like crashing my workstation for test purposes,
however, then you still need to do #1 above. I will check it out on an
embedded target tomorrow.
Because this affects so many architectures/boards, I thought I would ask:
a) Does anyone care?
b) What is the preferred method to fix? (I tried option 2, because it is
the most trivial, and it seems to work fine for me).
Thoughts? Opinions?
-Robin
More information about the U-Boot
mailing list