On Fri, 03.10.14 09:51, Jan Synacek (jsyna...@redhat.com) wrote: > 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 395f85c..816934e 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 d5d9d09..e30e686 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 066ef97..09f4a21 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 8ba1cfe..16cc593 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);
Hmm, we really shouldn't export functions that have are named "internal"... I have now changed this around a bit, so that we always have two flavours of the timestamp formatters, one function to format in local time, and one in UTC. Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel