From 4fd65aec913a1b99e8d748a7a82c150b8f7ee510 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 2 Jan 2015 10:15:29 +0000 Subject: Remove the --enable-right-tz configure option. Make it a run-time autodetection instead. Update doc. Thanks to Paul Jarc for the suggestion. --- src/libstddjb/djbtime-internal.h | 6 +++++- src/libstddjb/ltm64_from_tai.c | 21 +++++++-------------- src/libstddjb/ltm64_from_utc.c | 20 ++++++-------------- src/libstddjb/skalibs_tzisright.c | 17 +++++++++++++++++ src/libstddjb/tai_from_ltm64.c | 21 +++++++-------------- 5 files changed, 42 insertions(+), 43 deletions(-) create mode 100644 src/libstddjb/skalibs_tzisright.c (limited to 'src/libstddjb') diff --git a/src/libstddjb/djbtime-internal.h b/src/libstddjb/djbtime-internal.h index 26ffc81..819b88a 100644 --- a/src/libstddjb/djbtime-internal.h +++ b/src/libstddjb/djbtime-internal.h @@ -6,7 +6,7 @@ #include -/* Leap second handling, for UTC <--> TAI conversions */ + /* Leap second handling, for UTC <--> TAI conversions */ #define LEAPSECS_MAX 39 #define LEAPSECS_FILE SKALIBS_ETC "/leapsecs.dat" @@ -20,4 +20,8 @@ extern int leapsecs_sub_r (uint64 *, char const *, uint64 *) ; #define leapsecs_sub(t) leapsecs_sub_r((t), LEAPSECS_FILE, leapsecs_here) + /* Run-time test: does the current timezone handle leap seconds ? */ + +extern int skalibs_tzisright (void) ; + #endif diff --git a/src/libstddjb/ltm64_from_tai.c b/src/libstddjb/ltm64_from_tai.c index c0650c5..9161a79 100644 --- a/src/libstddjb/ltm64_from_tai.c +++ b/src/libstddjb/ltm64_from_tai.c @@ -1,23 +1,16 @@ /* ISC license. */ -#include #include #include #include - -#ifdef SKALIBS_FLAG_TZISRIGHT +#include "djbtime-internal.h" int ltm64_from_tai (uint64 *u, tai_t const *t) { - *u = t->x - 10U ; - return 1 ; + switch (skalibs_tzisright()) + { + case 1 : *u = t->x - 10U ; return 1 ; + case 0 : return utc_from_tai(u, t) ; + default : return 0 ; + } } - -#else - -int ltm64_from_tai (uint64 *u, tai_t const *t) -{ - return utc_from_tai(u, t) ; -} - -#endif diff --git a/src/libstddjb/ltm64_from_utc.c b/src/libstddjb/ltm64_from_utc.c index 8d66813..28907c9 100644 --- a/src/libstddjb/ltm64_from_utc.c +++ b/src/libstddjb/ltm64_from_utc.c @@ -1,23 +1,15 @@ /* ISC license. */ -#include #include #include #include "djbtime-internal.h" -#ifdef SKALIBS_FLAG_TZISRIGHT - int ltm64_from_utc (uint64 *u) { - return (leapsecs_add(u, 0) >= 0) ; + switch (skalibs_tzisright()) + { + case 1 : return leapsecs_add(u, 0) >= 0 ; + case 0 : return 1 ; + default : return 0 ; + } } - -#else - -int ltm64_from_utc (uint64 *u) -{ - (void)u ; - return 1 ; -} - -#endif diff --git a/src/libstddjb/skalibs_tzisright.c b/src/libstddjb/skalibs_tzisright.c new file mode 100644 index 0000000..f8414a6 --- /dev/null +++ b/src/libstddjb/skalibs_tzisright.c @@ -0,0 +1,17 @@ +/* ISC license. */ + +#include +#include +#include "djbtime-internal.h" + +int skalibs_tzisright () +{ + static int tzisright = -1 ; + if (tzisright < 0) + { + struct tm tm ; + time_t t = 78796800 ; + if (localtime_r(&t, &tm)) tzisright = tm.tm_sec == 60 ; + } + return tzisright ; +} diff --git a/src/libstddjb/tai_from_ltm64.c b/src/libstddjb/tai_from_ltm64.c index 2538c00..12a7394 100644 --- a/src/libstddjb/tai_from_ltm64.c +++ b/src/libstddjb/tai_from_ltm64.c @@ -1,23 +1,16 @@ /* ISC license. */ -#include #include #include #include - -#ifdef SKALIBS_FLAG_TZISRIGHT +#include "djbtime-internal.h" int tai_from_ltm64 (tai_t *t, uint64 u) { - tai_u64(t, u + 10U) ; - return 1 ; + switch (skalibs_tzisright()) + { + case 1 : tai_u64(t, u + 10U) ; return 1 ; + case 0 : return tai_from_utc(t, u) ; + default : return 0 ; + } } - -#else - -int tai_from_ltm64 (tai_t *t, uint64 u) -{ - return tai_from_utc(t, u) ; -} - -#endif -- cgit v1.3.1