svn commit: r294624 - head/sbin/kldstat

Edward Tomasz Napierala trasz at FreeBSD.org
Sat Jan 23 12:10:17 UTC 2016


Author: trasz
Date: Sat Jan 23 12:10:16 2016
New Revision: 294624
URL: https://svnweb.freebsd.org/changeset/base/294624

Log:
  Add "kldstat -h"; showing module sizes in hex is rather weird.
  
  Reviewed by:	emaste@ (earlier version)
  MFC after:	1 month
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D4969

Modified:
  head/sbin/kldstat/Makefile
  head/sbin/kldstat/kldstat.8
  head/sbin/kldstat/kldstat.c

Modified: head/sbin/kldstat/Makefile
==============================================================================
--- head/sbin/kldstat/Makefile	Sat Jan 23 11:46:52 2016	(r294623)
+++ head/sbin/kldstat/Makefile	Sat Jan 23 12:10:16 2016	(r294624)
@@ -29,4 +29,6 @@
 PROG=	kldstat
 MAN=	kldstat.8
 
+LIBADD=	util
+
 .include <bsd.prog.mk>

Modified: head/sbin/kldstat/kldstat.8
==============================================================================
--- head/sbin/kldstat/kldstat.8	Sat Jan 23 11:46:52 2016	(r294623)
+++ head/sbin/kldstat/kldstat.8	Sat Jan 23 12:10:16 2016	(r294624)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd January 22, 2014
+.Dd January 19, 2016
 .Dt KLDSTAT 8
 .Os
 .Sh NAME
@@ -33,6 +33,7 @@
 .Nd display status of dynamic kernel linker
 .Sh SYNOPSIS
 .Nm
+.Op Fl h
 .Op Fl q
 .Op Fl v
 .Op Fl i Ar id
@@ -48,6 +49,9 @@ kernel.
 .Pp
 The following options are available:
 .Bl -tag -width indentXX
+.It Fl h
+Display the size field in a human-readable form, using unit suffixes
+instead of hex values.
 .It Fl v
 Be more verbose.
 .It Fl i Ar id

Modified: head/sbin/kldstat/kldstat.c
==============================================================================
--- head/sbin/kldstat/kldstat.c	Sat Jan 23 11:46:52 2016	(r294623)
+++ head/sbin/kldstat/kldstat.c	Sat Jan 23 12:10:16 2016	(r294624)
@@ -28,6 +28,7 @@
 __FBSDID("$FreeBSD$");
 
 #include <err.h>
+#include <libutil.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -51,18 +52,27 @@ printmod(int modid)
 }
 
 static void
-printfile(int fileid, int verbose)
+printfile(int fileid, int verbose, int humanized)
 {
     struct kld_file_stat stat;
     int modid;
+    char buf[5];
 
     stat.version = sizeof(struct kld_file_stat);
-    if (kldstat(fileid, &stat) < 0)
+    if (kldstat(fileid, &stat) < 0) {
 	err(1, "can't stat file id %d", fileid);
-    else
-	printf("%2d %4d %p %-8zx %s",
-	       stat.id, stat.refs, stat.address, stat.size, 
-	       stat.name);
+    } else {
+	if (humanized) {
+	       humanize_number(buf, sizeof(buf), stat.size,
+	           "", HN_AUTOSCALE, HN_DECIMAL | HN_NOSPACE);
+
+	       printf("%2d %4d %p %5s %s",
+	           stat.id, stat.refs, stat.address, buf, stat.name);
+	} else {
+		printf("%2d %4d %p %-8zx %s",
+		    stat.id, stat.refs, stat.address, stat.size, stat.name);
+	}
+    }
 
     if (verbose) {
 	printf(" (%s)\n", stat.pathname);
@@ -78,7 +88,7 @@ printfile(int fileid, int verbose)
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: kldstat [-q] [-v] [-i id] [-n filename]\n");
+    fprintf(stderr, "usage: kldstat [-h] [-q] [-v] [-i id] [-n filename]\n");
     fprintf(stderr, "       kldstat [-q] [-m modname]\n");
     exit(1);
 }
@@ -87,6 +97,7 @@ int
 main(int argc, char** argv)
 {
     int c;
+    int humanized = 0;
     int verbose = 0;
     int fileid = 0;
     int quiet = 0;
@@ -94,8 +105,11 @@ main(int argc, char** argv)
     char* modname = NULL;
     char* p;
 
-    while ((c = getopt(argc, argv, "i:m:n:qv")) != -1)
+    while ((c = getopt(argc, argv, "hi:m:n:qv")) != -1)
 	switch (c) {
+	case 'h':
+	    humanized = 1;
+	    break;
 	case 'i':
 	    fileid = (int)strtoul(optarg, &p, 10);
 	    if (*p != '\0')
@@ -155,12 +169,15 @@ main(int argc, char** argv)
 	}
     }
 
-    printf("Id Refs Address%*c Size     Name\n", POINTER_WIDTH - 7, ' ');
+    if (humanized)
+	    printf("Id Refs Address%*c  Size Name\n", POINTER_WIDTH - 7, ' ');
+    else
+	    printf("Id Refs Address%*c Size     Name\n", POINTER_WIDTH - 7, ' ');
     if (fileid != 0)
-	printfile(fileid, verbose);
+	printfile(fileid, verbose, humanized);
     else
 	for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid))
-	    printfile(fileid, verbose);
+	    printfile(fileid, verbose, humanized);
 
     return 0;
 }


More information about the svn-src-head mailing list