This will pave way to add single option to define all time formats, such as --time-format=[ctime|reltime|delta|none]. Signed-off-by: Sami Kerola <kerolasa@xxxxxx> --- sys-utils/dmesg.c | 59 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c index ae8e938..b882120 100644 --- a/sys-utils/dmesg.c +++ b/sys-utils/dmesg.c @@ -126,6 +126,13 @@ enum { DMESG_METHOD_MMAP /* mmap file with records (see --file) */ }; +enum { + TIMEFTM_NONE = (1 << 0), + TIMEFTM_CTIME = (1 << 1), + TIMEFTM_DELTA = (1 << 2), + TIMEFTM_RELTIME = (1 << 3), +}; + struct dmesg_control { /* bit arrays -- see include/bitops.h */ char levels[ARRAY_SIZE(level_names) / NBBY + 1]; @@ -152,16 +159,13 @@ struct dmesg_control { char *filename; char *mmap_buff; size_t pagesize; + unsigned int time_fmt; /* time format */ unsigned int follow:1, /* wait for new messages */ raw:1, /* raw mode */ fltr_lev:1, /* filter out by levels[] */ fltr_fac:1, /* filter out by facilities[] */ decode:1, /* use "facility: level: " prefix */ - notime:1, /* don't print timestamp */ - delta:1, /* show time deltas */ - reltime:1, /* show human readable relative times */ - ctime:1, /* show human readable time */ pager:1, /* pipe output into a pager */ color:1; /* colorize messages */ }; @@ -689,9 +693,10 @@ static int get_next_syslog_record(struct dmesg_control *ctl, if (*begin == '[' && (*(begin + 1) == ' ' || isdigit(*(begin + 1)))) { - if (ctl->delta || ctl->ctime || ctl->reltime) + if (ctl->time_fmt & (TIMEFTM_DELTA | TIMEFTM_CTIME | TIMEFTM_RELTIME)) begin = parse_syslog_timestamp(begin + 1, &rec->tv); - else if (ctl->notime) + + else if (ctl->time_fmt & TIMEFTM_NONE) begin = skip_item(begin, end, "]"); if (begin < end && *begin == ' ') @@ -855,12 +860,12 @@ static void print_record(struct dmesg_control *ctl, /* * [sec.usec <delta>] or [ctime <delta>] */ - if (ctl->delta) { + if (ctl->time_fmt & TIMEFTM_DELTA) { if (ctl->color) color_enable(DMESG_COLOR_TIME); - if (ctl->ctime) + if (ctl->time_fmt & TIMEFTM_CTIME) printf("[%s ", record_ctime(ctl, rec, buf, sizeof(buf))); - else if (ctl->notime) + else if (ctl->time_fmt == TIMEFTM_NONE) putchar('['); else printf("[%5d.%06d ", (int) rec->tv.tv_sec, @@ -872,7 +877,7 @@ static void print_record(struct dmesg_control *ctl, /* * [ctime] */ - } else if (ctl->ctime) { + } else if (ctl->time_fmt & TIMEFTM_CTIME) { if (ctl->color) color_enable(DMESG_COLOR_TIME); printf("[%s] ", record_ctime(ctl, rec, buf, sizeof(buf))); @@ -883,7 +888,7 @@ static void print_record(struct dmesg_control *ctl, /* * [reltime] */ - else if (ctl->reltime) { + else if (ctl->time_fmt & TIMEFTM_RELTIME) { double delta; struct tm cur; @@ -918,14 +923,15 @@ static void print_record(struct dmesg_control *ctl, * the [sec.usec] string. */ if (ctl->method == DMESG_METHOD_KMSG && - !ctl->notime && !ctl->delta && !ctl->ctime && !ctl->reltime) { + !(ctl->time_fmt & TIMEFTM_NONE) + && !(ctl->time_fmt & (TIMEFTM_CTIME | TIMEFTM_DELTA | TIMEFTM_RELTIME))) + { if (ctl->color) color_enable(DMESG_COLOR_TIME); printf("[%5d.%06d] ", (int) rec->tv.tv_sec, (int) rec->tv.tv_usec); if (ctl->color) color_disable(); } - mesg: mesg = rec->mesg; mesg_size = rec->mesg_size; @@ -1065,7 +1071,7 @@ static int parse_kmsg_record(struct dmesg_control *ctl, goto mesg; /* C) timestamp */ - if (ctl->notime) + if (ctl->time_fmt & TIMEFTM_NONE) p = skip_item(p, end, ",;"); else p = parse_kmsg_timestamp(p, &rec->tv); @@ -1148,6 +1154,7 @@ int main(int argc, char *argv[]) .action = SYSLOG_ACTION_READ_ALL, .method = DMESG_METHOD_KMSG, .kmsg = -1, + .time_fmt = 0, }; int colormode = UL_COLORMODE_NEVER; @@ -1209,13 +1216,13 @@ int main(int argc, char *argv[]) ctl.action = SYSLOG_ACTION_CONSOLE_OFF; break; case 'd': - ctl.delta = 1; + ctl.time_fmt |= TIMEFTM_DELTA; break; case 'E': ctl.action = SYSLOG_ACTION_CONSOLE_ON; break; case 'e': - ctl.reltime = 1; + ctl.time_fmt |= TIMEFTM_RELTIME; break; case 'F': ctl.filename = optarg; @@ -1228,7 +1235,7 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; break; case 'H': - ctl.reltime = 1; + ctl.time_fmt |= TIMEFTM_RELTIME; ctl.color = 1; ctl.pager = 1; break; @@ -1273,10 +1280,10 @@ int main(int argc, char *argv[]) case 'T': ctl.boot_time = get_boot_time(); if (ctl.boot_time) - ctl.ctime = 1; + ctl.time_fmt |= TIMEFTM_CTIME; break; case 't': - ctl.notime = 1; + ctl.time_fmt |= TIMEFTM_NONE; break; case 'u': ctl.fltr_fac = 1; @@ -1304,20 +1311,20 @@ int main(int argc, char *argv[]) if (argc > 1) usage(stderr); - if (ctl.raw && (ctl.fltr_lev || ctl.fltr_fac || ctl.delta || - ctl.notime || ctl.ctime || ctl.decode)) + if (ctl.raw && (ctl.fltr_lev || ctl.fltr_fac || ctl.decode || + ctl.time_fmt & (TIMEFTM_NONE | TIMEFTM_DELTA | TIMEFTM_CTIME))) errx(EXIT_FAILURE, _("--raw can't be used together with level, " - "facility, decode, delta, ctime or notime options")); + "facility, decode, delta, ctime or notime options")); - if (ctl.notime && (ctl.ctime || ctl.reltime)) + if (ctl.time_fmt & TIMEFTM_NONE && (ctl.time_fmt & (TIMEFTM_CTIME | TIMEFTM_RELTIME))) errx(EXIT_FAILURE, _("--notime can't be used together with --ctime or --reltime")); - if (ctl.reltime && ctl.ctime) + if ((ctl.time_fmt & TIMEFTM_RELTIME) && (ctl.time_fmt & TIMEFTM_CTIME)) errx(EXIT_FAILURE, _("--reltime can't be used together with --ctime ")); - if (ctl.reltime) { + if (ctl.time_fmt & TIMEFTM_RELTIME) { ctl.boot_time = get_boot_time(); if (!ctl.boot_time) - ctl.reltime = 0; + ctl.time_fmt &= TIMEFTM_RELTIME; } ctl.color = colors_init(colormode) ? 1 : 0; -- 1.8.3 -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html