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;
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to