From 3afa34e8db077e7d771e61f9cdc59dcd6e0a7c8a Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 19 Feb 2021 15:55:08 +0100 Subject: Fix leap second support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- mongoclock.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/mongoclock.c b/mongoclock.c index 3823b13..dfc5578 100644 --- a/mongoclock.c +++ b/mongoclock.c @@ -135,11 +135,29 @@ display_time(int timerfd) r = adjtimex(&timex); if (r == -1) goto fail; - now = localtime(&timex.time.tv_sec); - if (now == NULL) - goto fail; - if (r == TIME_OOP) + if (timex.time.tv_sec % (24 * 60 * 60) == 0) { + if (r == TIME_INS) { + timex.time.tv_sec -= 1; + now = localtime(&timex.time.tv_sec); + if (!now) + goto fail; + now->tm_sec += 1; + goto now_checked; + } else if (r == TIME_DEL) { + timex.time.tv_sec += 1; + now = localtime(&timex.time.tv_sec); + } else { + now = localtime(&timex.time.tv_sec); + } + } else if (r == TIME_OOP) { + now = localtime(&timex.time.tv_sec); now->tm_sec += 1; + } else { + now = localtime(&timex.time.tv_sec); + } + if (!now) + goto fail; + now_checked: #else now_ = time(NULL); if (now_ == -1) -- cgit v1.2.3-70-g09d2