if it contained a "19" before. There are machines (in particular PS/2
descendants) which have a checksum at this place.
Introduce a patchable kernel variable "rtc_update_century" to modify
the behaviour: 1="always update" (for testing and if one wants to set
the clock back) or -1="never touch".
underscore (_) directly. (XXX Except in a few places, where traditional
CPP's macro evaluation semantics break things, so we test for __ELF__
directly in those places).
- returned EOPNOTSUPP rather than -1.
- no check for negative offset.
many of these fix potential security problems in these drivers.
XXX XXX XXX
the d_mmap cdev routine should be changed to have a prototype like:
paddr_t (*d_mmap) __P((dev_t, off_t, int));
by someone!
"bcdtobin". The old names were bogus.
2) Make the code grok the NVRAM's century field. This code is, to say
the least, poorly tested. It should make NetBSD play nicer with other
OSes that care about the century field, however.
BCD into the year field of the RTC in years > 1999. It seems to have
worked just fine on my old broken down test machine, but apparently
some others actually get hurt. Suckage. We now make sure that we load
valid BCD.
Other ports should check for variations on this theme.
clock past the End of Time.
If time_t is 32 bits, then the "End of Time" is Jan 18/19 2038
(depending on time zone).
This code copes with RTC's past the end of time if time_t is an int32
or less. It just forces the time back to 2037. This will let users
with screwed up clocks to at least boot and function long enough to
set their clocks to something sane.
This kludge is conditioned on an
if (sizeof(time_t) <= sizeof(int32_t))
which will automatically optimize the code out once we switch time_t
to a 64 bit quantity, which should happen well before 2037.
Patch based on code from Michael C. Richardson, with help from
Allen Briggs who pointed out a fencepost error.