--- tzfile.h.orig 2010-01-15 00:06:58.000000000 -0800 +++ tzfile.h 2010-01-15 00:07:28.000000000 -0800 @@ -38,7 +38,11 @@ static char tzfilehid[] = "@(#)tzfile.h #endif /* !defined TZDIR */ #ifndef TZDEFAULT +#ifdef UNIFDEF_MOVE_LOCALTIME +#define TZDEFAULT "/var/db/timezone/localtime" +#else /* !UNIFDEF_MOVE_LOCALTIME */ #define TZDEFAULT "/etc/localtime" +#endif /* UNIFDEF_MOVE_LOCALTIME */ #endif /* !defined TZDEFAULT */ #ifndef TZDEFRULES @@ -167,6 +171,20 @@ struct tzhead { #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) +/* +** Since everything in isleap is modulo 400 (or a factor of 400), we know that +** isleap(y) == isleap(y % 400) +** and so +** isleap(a + b) == isleap((a + b) % 400) +** or +** isleap(a + b) == isleap(a % 400 + b % 400) +** This is true even if % means modulo rather than Fortran remainder +** (which is allowed by C89 but not C99). +** We use this to avoid addition overflow problems. +*/ + +#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) + #ifndef USG /*