From 86698d3885b8bf575b4f3d8e99d62b20f0682e5d Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 27 Feb 2017 16:02:24 +0100 Subject: [PATCH] log: fix lxc_unix_epoch_to_utc() The conversion algorithm used uses a clever trick by letting a year start at 1 March. So we need to add 1 for January and February. Signed-off-by: Christian Brauner --- src/lxc/log.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lxc/log.c b/src/lxc/log.c index cdeec9f39..339b81c61 100644 --- a/src/lxc/log.c +++ b/src/lxc/log.c @@ -173,7 +173,7 @@ int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespec *time yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; /* Given year-of-era, and era, one can now compute the year. */ - year = (yoe) + era * 400; + year = yoe + era * 400; /* Also the day-of-year, again with the year beginning on Mar. 1, can be * computed from the day-of-era and year-of-era. @@ -193,6 +193,11 @@ int lxc_unix_epoch_to_utc(char *buf, size_t bufsize, const struct timespec *time */ month = mp + (mp < 10 ? 3 : -9); + /* The algorithm assumes that a year begins on 1 March, so add 1 before + * that. */ + if (month < 3) + year++; + /* Transform days in the epoch to seconds. */ d_in_s = epoch_to_days * 86400; -- 2.47.2