logs-show: make output_timestamp_realtime() only take realtime timestamp

No functional change, just refactoring and preparation for later
commits.
This commit is contained in:
Yu Watanabe 2024-05-01 05:03:01 +09:00
parent c9df471428
commit 6ed286d2cf

View file

@ -364,39 +364,37 @@ static int output_timestamp_realtime(
sd_journal *j, sd_journal *j,
OutputMode mode, OutputMode mode,
OutputFlags flags, OutputFlags flags,
const dual_timestamp *display_ts) { usec_t usec) {
char buf[CONST_MAX(FORMAT_TIMESTAMP_MAX, 64U)]; char buf[CONST_MAX(FORMAT_TIMESTAMP_MAX, 64U)];
int r;
assert(f); assert(f);
assert(j); assert(j);
assert(display_ts);
if (!VALID_REALTIME(display_ts->realtime)) if (!VALID_REALTIME(usec))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No valid realtime timestamp available"); return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No valid realtime timestamp available.");
if (IN_SET(mode, OUTPUT_SHORT_FULL, OUTPUT_WITH_UNIT)) { if (IN_SET(mode, OUTPUT_SHORT_FULL, OUTPUT_WITH_UNIT)) {
const char *k; const char *k;
if (flags & OUTPUT_UTC) if (flags & OUTPUT_UTC)
k = format_timestamp_style(buf, sizeof(buf), display_ts->realtime, TIMESTAMP_UTC); k = format_timestamp_style(buf, sizeof(buf), usec, TIMESTAMP_UTC);
else else
k = format_timestamp(buf, sizeof(buf), display_ts->realtime); k = format_timestamp(buf, sizeof(buf), usec);
if (!k) if (!k)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to format timestamp: %" PRIu64, display_ts->realtime); "Failed to format timestamp: %" PRIu64, usec);
} else { } else {
struct tm tm; struct tm tm;
time_t t; time_t t;
t = (time_t) (display_ts->realtime / USEC_PER_SEC); t = (time_t) (usec / USEC_PER_SEC);
switch (mode) { switch (mode) {
case OUTPUT_SHORT_UNIX: case OUTPUT_SHORT_UNIX:
xsprintf(buf, "%10"PRI_TIME".%06"PRIu64, t, display_ts->realtime % USEC_PER_SEC); xsprintf(buf, "%10"PRI_TIME".%06"PRIu64, t, usec % USEC_PER_SEC);
break; break;
case OUTPUT_SHORT_ISO: case OUTPUT_SHORT_ISO:
@ -404,13 +402,11 @@ static int output_timestamp_realtime(
size_t tail = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S", size_t tail = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S",
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)); localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC));
if (tail == 0) if (tail == 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to format ISO time.");
"Failed to format ISO time");
/* No usec in strftime, need to append */ /* No usec in strftime, need to append */
if (mode == OUTPUT_SHORT_ISO_PRECISE) { if (mode == OUTPUT_SHORT_ISO_PRECISE) {
assert(ELEMENTSOF(buf) - tail >= 7); assert_se(snprintf_ok(buf + tail, ELEMENTSOF(buf) - tail, ".%06"PRI_USEC, usec % USEC_PER_SEC));
snprintf(buf + tail, ELEMENTSOF(buf) - tail, ".%06"PRI_USEC, display_ts->realtime % USEC_PER_SEC);
tail += 7; tail += 7;
} }
@ -425,19 +421,12 @@ static int output_timestamp_realtime(
if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S",
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0) localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to format syslog time.");
"Failed to format syslog time");
if (mode == OUTPUT_SHORT_PRECISE) { if (mode == OUTPUT_SHORT_PRECISE) {
size_t k;
assert(sizeof(buf) > strlen(buf)); assert(sizeof(buf) > strlen(buf));
k = sizeof(buf) - strlen(buf); if (!snprintf_ok(buf + strlen(buf), sizeof(buf) - strlen(buf), ".%06"PRIu64, usec % USEC_PER_SEC))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to format precise time.");
r = snprintf(buf + strlen(buf), k, ".%06"PRIu64, display_ts->realtime % USEC_PER_SEC);
if (r <= 0 || (size_t) r >= k) /* too long? */
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to format precise time");
} }
break; break;
@ -573,7 +562,7 @@ static int output_short(
if (IN_SET(mode, OUTPUT_SHORT_MONOTONIC, OUTPUT_SHORT_DELTA)) if (IN_SET(mode, OUTPUT_SHORT_MONOTONIC, OUTPUT_SHORT_DELTA))
r = output_timestamp_monotonic(f, mode, &display_ts, &boot_id, previous_display_ts, previous_boot_id); r = output_timestamp_monotonic(f, mode, &display_ts, &boot_id, previous_display_ts, previous_boot_id);
else else
r = output_timestamp_realtime(f, j, mode, flags, &display_ts); r = output_timestamp_realtime(f, j, mode, flags, display_ts.realtime);
if (r < 0) if (r < 0)
return r; return r;
n += r; n += r;