Subject: Re: CVS commit: src/sys/kern
To: None <source-changes@NetBSD.org>
From: Alan Barrett <apb@cequrux.com>
List: source-changes
Date: 09/12/2006 16:57:07
On Mon, 11 Sep 2006, Perry E. Metzger wrote:
> Garrett D'Amore <gdamore@netbsd.org> writes:
> > Modified Files:
> > 	src/sys/kern: kern_todr.c
> >
> > Log Message:
> > Allow for leap seconds.
> 
> I would have thought 61 was sufficient. Is 62 really possible?

In reality, there will never be more than one leap second in a given
minute.

The C89 standard accidentally made allowance for two leap seconds,
saying that the tm_sec field of struct tm could contain values in the
range 0 to 61.  This old thread from comp.stc.c discusses the issue:
<http://groups.google.co.uk/group/comp.std.misc/browse_thread/thread/9ebfaed74bffb281/c9babd4663808f0f?lnk=gst&q=tm_sec+leap&rnum=9>

That error seems to have spread to other APIs.  For example, time.h in
SUSv2 <http://www.opengroup.org/onlinepubs/007908799/xsh/time.h.html>
allows for a double leap second.

C99 fixes this, saying that tm_sec contains values in the range 0 to 60
(ISO 9899:1999 section 7.23.1).

--apb (Alan Barrett)