tzfile.h.patch   [plain text]


--- 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
 
 /*