Module Name:    src
Committed By:   christos
Date:           Tue Apr 10 22:21:52 UTC 2018

Modified Files:
        src/sbin/dmesg: dmesg.8 dmesg.c

Log Message:
match the linux dmesg flags.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sbin/dmesg/dmesg.8
cvs rdiff -u -r1.30 -r1.31 src/sbin/dmesg/dmesg.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/dmesg/dmesg.8
diff -u src/sbin/dmesg/dmesg.8:1.18 src/sbin/dmesg/dmesg.8:1.19
--- src/sbin/dmesg/dmesg.8:1.18	Sun Apr  1 15:31:16 2018
+++ src/sbin/dmesg/dmesg.8	Tue Apr 10 18:21:52 2018
@@ -1,4 +1,4 @@
-.\"	$NetBSD: dmesg.8,v 1.18 2018/04/01 19:31:16 christos Exp $
+.\"	$NetBSD: dmesg.8,v 1.19 2018/04/10 22:21:52 christos Exp $
 .\"
 .\" Copyright (c) 1980, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)dmesg.8	8.1 (Berkeley) 6/5/93
 .\"
-.Dd March 31, 2018
+.Dd April 10, 2018
 .Dt DMESG 8
 .Os
 .Sh NAME
@@ -37,7 +37,7 @@
 .Nd "display the system message buffer"
 .Sh SYNOPSIS
 .Nm
-.Op Fl qt
+.Op Fl dtT
 .Op Fl M Ar core
 .Op Fl N Ar system
 .Sh DESCRIPTION
@@ -46,16 +46,22 @@ displays the contents of the system mess
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
+.It Fl d
+Show just the timestamp deltas.
+Used together with
+.Fl t
+only the deltas are shown.
 .It Fl M
 Extract values associated with the name list from the specified core
 instead of the default ``/dev/mem''.
 .It Fl N
 Extract the name list from the specified system instead of the default
 ``/netbsd''.
-.It Fl q
-Quiet printing, don't print timestamps.
+.It Fl T
+Format uptime timestamps in a human readable form (using
+.Xr ctime 3 ).
 .It Fl t
-Format uptime timestamps in a human readable form.
+Quiet printing, don't print timestamps.
 .El
 .Pp
 The system message buffer is a circular buffer of a fixed size.

Index: src/sbin/dmesg/dmesg.c
diff -u src/sbin/dmesg/dmesg.c:1.30 src/sbin/dmesg/dmesg.c:1.31
--- src/sbin/dmesg/dmesg.c:1.30	Sun Apr  1 21:15:31 2018
+++ src/sbin/dmesg/dmesg.c	Tue Apr 10 18:21:52 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: dmesg.c,v 1.30 2018/04/02 01:15:31 christos Exp $	*/
+/*	$NetBSD: dmesg.c,v 1.31 2018/04/10 22:21:52 christos Exp $	*/
 /*-
  * Copyright (c) 1991, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -38,7 +38,7 @@ __COPYRIGHT("@(#) Copyright (c) 1991, 19
 #if 0
 static char sccsid[] = "@(#)dmesg.c	8.1 (Berkeley) 6/5/93";
 #else
-__RCSID("$NetBSD: dmesg.c,v 1.30 2018/04/02 01:15:31 christos Exp $");
+__RCSID("$NetBSD: dmesg.c,v 1.31 2018/04/10 22:21:52 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -82,31 +82,39 @@ main(int argc, char *argv[])
 	char tbuf[64];
 	char *memf, *nlistf;
 	struct timeval boottime;
-	int ptime = 0;
+	struct timespec lasttime;
+	intmax_t sec;
+	long nsec;
+	int deltas, quiet, humantime;
 	
 	static const int bmib[] = { CTL_KERN, KERN_BOOTTIME };
 	size = sizeof(boottime);
 
 	boottime.tv_sec = 0;
 	boottime.tv_usec = 0;
-	ptime = 0;
+	lasttime.tv_sec = 0;
+	lasttime.tv_nsec = 0;
+	deltas = quiet = humantime = 0;
 
         (void)sysctl(bmib, 2, &boottime, &size, NULL, 0);
 
 	memf = nlistf = NULL;
-	while ((ch = getopt(argc, argv, "M:N:qt")) != -1)
+	while ((ch = getopt(argc, argv, "dM:N:tT")) != -1)
 		switch(ch) {
+		case 'd':
+			deltas = 1;
+			break;
 		case 'M':
 			memf = optarg;
 			break;
 		case 'N':
 			nlistf = optarg;
 			break;
-		case 'q':
-			ptime = -1;
-			break;
 		case 't':
-			ptime = 1;
+			quiet = 1;
+			break;
+		case 'T':
+			humantime = 1;
 			break;
 		case '?':
 		default:
@@ -114,6 +122,8 @@ main(int argc, char *argv[])
 		}
 	argc -= optind;
 	argv += optind;
+	if (quiet && humantime)
+		err(EXIT_FAILURE, "-t cannot be used with -T");
 
 	if (memf == NULL) {
 #endif
@@ -207,23 +217,35 @@ main(int argc, char *argv[])
 				ADDC('\0');
 				tstamp = 0;
 #ifndef SMALL
-				if (ptime == 1) {
-					intmax_t sec;
+				sscanf(tbuf, "[%jd.%ld]", &sec, &nsec);
+				if (!quiet || deltas)
+					printf("[");
+				if (humantime) {
 					time_t t;
-					long nsec;
 					struct tm tm;
-
-					sscanf(tbuf, "[%jd.%ld]", &sec, &nsec);
 					t = boottime.tv_sec + sec;
 					if (localtime_r(&t, &tm) != NULL) {
 						strftime(tbuf, sizeof(tbuf),
-						    "[%a %b %e %H:%M:%S %Z %Y]",
+						    "%a %b %e %H:%M:%S %Z %Y",
 						     &tm);
-						printf("%s ", tbuf);
+						printf("%s", tbuf);
 					}
-					continue;
-				} else if (ptime != -1)
-					printf("%s ", tbuf);
+				} else if (!quiet) {
+					printf("% 9jd.%06ld",
+					    sec, nsec / 1000);
+				}
+				if (deltas) {
+					struct timespec nt = { sec, nsec };
+					struct timespec dt;
+					timespecsub(&nt, &lasttime, &dt);
+					if (humantime || !quiet)
+						printf(" ");
+					printf("<% 4jd.%06ld>", (intmax_t)
+					    dt.tv_sec, dt.tv_nsec / 1000);
+					lasttime = nt;
+				}
+				if (!quiet || deltas)
+					printf("] ");
 #endif
 				continue;
 			case ' ':

Reply via email to