leapdb: make twice per day check logic common
We want to do the twice per day check regardless of the data source. Move the check up one level from get_tz_leap() into LDB_GetLeap().
This commit is contained in:
parent
017d6f8f56
commit
02ae9a8607
1 changed files with 20 additions and 21 deletions
41
leapdb.c
41
leapdb.c
|
@ -41,24 +41,10 @@ static char *leap_tzname;
|
|||
static NTP_Leap
|
||||
get_tz_leap(time_t when, int *tai_offset)
|
||||
{
|
||||
static time_t last_tz_leap_check;
|
||||
static NTP_Leap tz_leap;
|
||||
static int tz_tai_offset;
|
||||
|
||||
struct tm stm, *tm;
|
||||
time_t t;
|
||||
char *tz_env, tz_orig[128];
|
||||
|
||||
*tai_offset = tz_tai_offset;
|
||||
|
||||
/* Do this check at most twice a day */
|
||||
when = when / (12 * 3600) * (12 * 3600);
|
||||
if (last_tz_leap_check == when)
|
||||
return tz_leap;
|
||||
|
||||
last_tz_leap_check = when;
|
||||
tz_leap = LEAP_Normal;
|
||||
tz_tai_offset = 0;
|
||||
NTP_Leap tz_leap = LEAP_Normal;
|
||||
|
||||
tm = gmtime(&when);
|
||||
if (!tm)
|
||||
|
@ -79,7 +65,7 @@ get_tz_leap(time_t when, int *tai_offset)
|
|||
/* Get the TAI-UTC offset, which started at the epoch at 10 seconds */
|
||||
t = mktime(&stm);
|
||||
if (t != -1)
|
||||
tz_tai_offset = t - when + 10;
|
||||
*tai_offset = t - when + 10;
|
||||
|
||||
/* Set the time to 23:59:60 and see how it overflows in mktime() */
|
||||
stm.tm_sec = 60;
|
||||
|
@ -102,8 +88,6 @@ get_tz_leap(time_t when, int *tai_offset)
|
|||
else if (stm.tm_sec == 1)
|
||||
tz_leap = LEAP_DeleteSecond;
|
||||
|
||||
*tai_offset = tz_tai_offset;
|
||||
|
||||
return tz_leap;
|
||||
}
|
||||
|
||||
|
@ -132,10 +116,25 @@ LDB_Initialise(void)
|
|||
NTP_Leap
|
||||
LDB_GetLeap(time_t when, int *tai_offset)
|
||||
{
|
||||
*tai_offset = 0;
|
||||
static time_t last_ldb_leap_check;
|
||||
static NTP_Leap ldb_leap;
|
||||
static int ldb_tai_offset;
|
||||
|
||||
/* Do this check at most twice a day */
|
||||
when = when / (12 * 3600) * (12 * 3600);
|
||||
if (last_ldb_leap_check == when)
|
||||
goto out;
|
||||
|
||||
last_ldb_leap_check = when;
|
||||
ldb_leap = LEAP_Normal;
|
||||
ldb_tai_offset = 0;
|
||||
|
||||
if (leap_tzname)
|
||||
return get_tz_leap(when, tai_offset);
|
||||
return LEAP_Normal;
|
||||
ldb_leap = get_tz_leap(when, &ldb_tai_offset);
|
||||
|
||||
out:
|
||||
*tai_offset = ldb_tai_offset;
|
||||
return ldb_leap;
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
|
Loading…
Reference in a new issue