Author: eadler
Date: Fri May 10 03:42:48 2013
New Revision: 250430
URL: http://svnweb.freebsd.org/changeset/base/250430

Log:
  Add support for 'dmesg -c' which clears the dmesg buffer after it has
  been printed.  This provides compatibility with other *nix systems
  (including Linux).
  
  While here use stdbool booleans for 'all'.
  
  PR:           bin/178295
  Submitted by: Levent Serinol <lseri...@gmail.com>
  Reviewed by:  will

Modified:
  head/sbin/dmesg/dmesg.8
  head/sbin/dmesg/dmesg.c

Modified: head/sbin/dmesg/dmesg.8
==============================================================================
--- head/sbin/dmesg/dmesg.8     Fri May 10 03:05:44 2013        (r250429)
+++ head/sbin/dmesg/dmesg.8     Fri May 10 03:42:48 2013        (r250430)
@@ -36,7 +36,7 @@
 .Nd "display the system message buffer"
 .Sh SYNOPSIS
 .Nm
-.Op Fl a
+.Op Fl ac
 .Op Fl M Ar core Op Fl N Ar system
 .Sh DESCRIPTION
 The
@@ -59,6 +59,8 @@ Show all data in the message buffer.
 This includes any syslog records and
 .Pa /dev/console
 output.
+.It Fl c
+Clear the kernel buffer after printing.
 .It Fl M
 Extract values associated with the name list from the specified core.
 .It Fl N

Modified: head/sbin/dmesg/dmesg.c
==============================================================================
--- head/sbin/dmesg/dmesg.c     Fri May 10 03:05:44 2013        (r250429)
+++ head/sbin/dmesg/dmesg.c     Fri May 10 03:42:48 2013        (r250430)
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
 #include <locale.h>
 #include <nlist.h>
 #include <stdio.h>
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -79,15 +80,20 @@ main(int argc, char *argv[])
        kvm_t *kd;
        size_t buflen, bufpos;
        long pri;
-       int all, ch;
+       int ch, clear;
+       bool all;
 
-       all = 0;
+       all = false;
+       clear = false;
        (void) setlocale(LC_CTYPE, "");
        memf = nlistf = NULL;
-       while ((ch = getopt(argc, argv, "aM:N:")) != -1)
+       while ((ch = getopt(argc, argv, "acM:N:")) != -1)
                switch(ch) {
                case 'a':
-                       all++;
+                       all = true;
+                       break;
+               case 'c':
+                       clear = true;
                        break;
                case 'M':
                        memf = optarg;
@@ -190,12 +196,16 @@ main(int argc, char *argv[])
                (void)strvisx(visbp, p, nextp - p, 0);
                (void)printf("%s", visbp);
        }
+       if (clear)
+               if (sysctlbyname("kern.msgbuf_clear", NULL, NULL, &clear, 
sizeof(int)))
+                       err(1, "sysctl kern.msgbuf_clear");
+
        exit(0);
 }
 
 void
 usage(void)
 {
-       (void)fprintf(stderr, "usage: dmesg [-a] [-M core [-N system]]\n");
+       fprintf(stderr, "usage: dmesg [-ac] [-M core [-N system]]\n");
        exit(1);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to