From a62e83b48cda6a709a796a361abaf6b129650b3c Mon Sep 17 00:00:00 2001 From: Jan Synacek Date: Fri, 3 Oct 2014 09:51:33 +0200 Subject: [PATCH] journalctl: make --utc work everywhere The --utc option was introduced by commit 9fd290443f5f99fca0dcd4216b1de70f7d3b8db1. Howerver, the implementation was incomplete. --- src/journal/journalctl.c | 14 +++++++------- src/shared/logs-show.c | 2 +- src/shared/time-util.c | 19 +++++++++++++++---- src/shared/time-util.h | 3 ++- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 395f85c9a..816934ee6 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -890,8 +890,8 @@ static int list_boots(sd_journal *j) { printf("% *i " SD_ID128_FORMAT_STR " %s—%s\n", w, i - count + 1, SD_ID128_FORMAT_VAL(id->id), - format_timestamp(a, sizeof(a), id->first), - format_timestamp(b, sizeof(b), id->last)); + format_timestamp_internal(a, sizeof(a), id->first, arg_utc), + format_timestamp_internal(b, sizeof(b), id->last, arg_utc)); } return 0; @@ -1502,8 +1502,8 @@ static int verify(sd_journal *j) { if (arg_verify_key && JOURNAL_HEADER_SEALED(f->header)) { if (validated > 0) { log_info("=> Validated from %s to %s, final %s entries not sealed.", - format_timestamp(a, sizeof(a), first), - format_timestamp(b, sizeof(b), validated), + format_timestamp_internal(a, sizeof(a), first, arg_utc), + format_timestamp_internal(b, sizeof(b), validated, arg_utc), format_timespan(c, sizeof(c), last > validated ? last - validated : 0, 0)); } else if (last > 0) log_info("=> No sealing yet, %s of entries not sealed.", @@ -1898,11 +1898,11 @@ int main(int argc, char *argv[]) { if (r > 0) { if (arg_follow) printf("-- Logs begin at %s. --\n", - format_timestamp(start_buf, sizeof(start_buf), start)); + format_timestamp_internal(start_buf, sizeof(start_buf), start, arg_utc)); else printf("-- Logs begin at %s, end at %s. --\n", - format_timestamp(start_buf, sizeof(start_buf), start), - format_timestamp(end_buf, sizeof(end_buf), end)); + format_timestamp_internal(start_buf, sizeof(start_buf), start, arg_utc), + format_timestamp_internal(end_buf, sizeof(end_buf), end, arg_utc)); } } diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index d5d9d090b..e30e6865a 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -447,7 +447,7 @@ static int output_verbose( } fprintf(f, "%s [%s]\n", - format_timestamp_us(ts, sizeof(ts), realtime), + format_timestamp_us(ts, sizeof(ts), realtime, flags & OUTPUT_UTC), cursor); JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) { diff --git a/src/shared/time-util.c b/src/shared/time-util.c index 066ef973a..09f4a2135 100644 --- a/src/shared/time-util.c +++ b/src/shared/time-util.c @@ -152,7 +152,7 @@ struct timeval *timeval_store(struct timeval *tv, usec_t u) { return tv; } -char *format_timestamp(char *buf, size_t l, usec_t t) { +char *format_timestamp_internal(char *buf, size_t l, usec_t t, bool utc) { struct tm tm; time_t sec; @@ -164,13 +164,21 @@ char *format_timestamp(char *buf, size_t l, usec_t t) { sec = (time_t) (t / USEC_PER_SEC); - if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S %Z", localtime_r(&sec, &tm)) <= 0) + if (utc) + gmtime_r(&sec, &tm); + else + localtime_r(&sec, &tm); + if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S %Z", &tm) <= 0) return NULL; return buf; } -char *format_timestamp_us(char *buf, size_t l, usec_t t) { +char *format_timestamp(char *buf, size_t l, usec_t t) { + return format_timestamp_internal(buf, l, t, false); +} + +char *format_timestamp_us(char *buf, size_t l, usec_t t, bool utc) { struct tm tm; time_t sec; @@ -181,7 +189,10 @@ char *format_timestamp_us(char *buf, size_t l, usec_t t) { return NULL; sec = (time_t) (t / USEC_PER_SEC); - localtime_r(&sec, &tm); + if (utc) + gmtime_r(&sec, &tm); + else + localtime_r(&sec, &tm); if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S", &tm) <= 0) return NULL; diff --git a/src/shared/time-util.h b/src/shared/time-util.h index 8ba1cfee8..16cc593cf 100644 --- a/src/shared/time-util.h +++ b/src/shared/time-util.h @@ -84,8 +84,9 @@ struct timespec *timespec_store(struct timespec *ts, usec_t u); usec_t timeval_load(const struct timeval *tv) _pure_; struct timeval *timeval_store(struct timeval *tv, usec_t u); +char *format_timestamp_internal(char *buf, size_t l, usec_t t, bool utc); char *format_timestamp(char *buf, size_t l, usec_t t); -char *format_timestamp_us(char *buf, size_t l, usec_t t); +char *format_timestamp_us(char *buf, size_t l, usec_t t, bool utc); char *format_timestamp_relative(char *buf, size_t l, usec_t t); char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy); -- 2.30.2