Proposed asctime-related changes

Paul Eggert eggert at CS.UCLA.EDU
Mon Aug 9 21:36:44 UTC 2004


"Clive D.W. Feather" <clive at demon.net> writes:

>     if ((unsigned) timeptr->tm_wday >= sizeof wday_name / sizeof wday_name[0])
>
> makes it one comparison instead of two.

Hold on a second.  Isn't this optimization invalid on hosts with
padding bits where UINT_MAX == INT_MAX?  On such hosts,
(unsigned)-INT_MAX is 1, which is in range, even though -INT_MAX isn't
in range.

> Olson, Arthur David (NIH/NCI) said:
>> zdump.c might be compiled with a version of localtime or gmtime
>> that does something evil,

Well, in that case all bets are off: zdump can't possibly work on
systems whose localtime or gmtime functions do arbitrarily evil
things.  They might set tm_year to a trap representation, for example,
and in that case zdump can dump core despite the redundant checking.

If you prefer the check, that's fine, I suppose it won't hurt on any
real host (except for performance).  But could you please add a
comment about it?  Something like this:

   /*
   ** This range test defends against the off-chance that the system
   ** localtime or gmtime is buggy and returns out-of-range values.
   ** We don't know of any such systems, but we're playing it safe anyway.
   */
   if (timeptr->tm_wday < 0
       || timeptr->tm_wday >= (int) (sizeof wday_name / sizeof wday_name[0]))



More information about the tz mailing list