Sat Oct 3 02:27:43 2009 UTC ()
Make modstat output look pretty again.


(elad)
diff -r1.7 -r1.8 src/sbin/modstat/main.c

cvs diff -r1.7 -r1.8 src/sbin/modstat/main.c (expand / switch to unified diff)

--- src/sbin/modstat/main.c 2009/10/02 18:50:14 1.7
+++ src/sbin/modstat/main.c 2009/10/03 02:27:43 1.8
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: main.c,v 1.7 2009/10/02 18:50:14 elad Exp $ */ 1/* $NetBSD: main.c,v 1.8 2009/10/03 02:27:43 elad Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2008 The NetBSD Foundation, Inc. 4 * Copyright (c) 2008 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
@@ -18,27 +18,27 @@ @@ -18,27 +18,27 @@
18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29#include <sys/cdefs.h> 29#include <sys/cdefs.h>
30#ifndef lint 30#ifndef lint
31__RCSID("$NetBSD: main.c,v 1.7 2009/10/02 18:50:14 elad Exp $"); 31__RCSID("$NetBSD: main.c,v 1.8 2009/10/03 02:27:43 elad Exp $");
32#endif /* !lint */ 32#endif /* !lint */
33 33
34#include <sys/module.h> 34#include <sys/module.h>
35 35
36#include <stdio.h> 36#include <stdio.h>
37#include <stdlib.h> 37#include <stdlib.h>
38#include <string.h> 38#include <string.h>
39#include <unistd.h> 39#include <unistd.h>
40#include <err.h> 40#include <err.h>
41 41
42int main(int, char **); 42int main(int, char **);
43static void usage(void) __dead; 43static void usage(void) __dead;
44static int modstatcmp(const void *, const void *); 44static int modstatcmp(const void *, const void *);
@@ -89,44 +89,45 @@ main(int argc, char **argv) @@ -89,44 +89,45 @@ main(int argc, char **argv)
89 for (len = 4096;;) { 89 for (len = 4096;;) {
90 iov.iov_base = malloc(len); 90 iov.iov_base = malloc(len);
91 iov.iov_len = len; 91 iov.iov_len = len;
92 if (modctl(MODCTL_STAT, &iov)) { 92 if (modctl(MODCTL_STAT, &iov)) {
93 err(EXIT_FAILURE, "modctl(MODCTL_STAT)"); 93 err(EXIT_FAILURE, "modctl(MODCTL_STAT)");
94 } 94 }
95 if (len >= iov.iov_len) { 95 if (len >= iov.iov_len) {
96 break; 96 break;
97 } 97 }
98 free(iov.iov_base); 98 free(iov.iov_base);
99 len = iov.iov_len; 99 len = iov.iov_len;
100 } 100 }
101 101
102 printf("NAME\t\tCLASS\tSOURCE\tREFS\tSIZE\tREQUIRES\n"); 102 printf("%-16s %-10s %-10s %-5s %-8s %s\n",
 103 "NAME", "CLASS", "SOURCE", "REFS", "SIZE", "REQUIRES");
103 len = iov.iov_len / sizeof(modstat_t); 104 len = iov.iov_len / sizeof(modstat_t);
104 qsort(iov.iov_base, len, sizeof(modstat_t), modstatcmp); 105 qsort(iov.iov_base, len, sizeof(modstat_t), modstatcmp);
105 for (ms = iov.iov_base; len != 0; ms++, len--) { 106 for (ms = iov.iov_base; len != 0; ms++, len--) {
106 if (name != NULL && strcmp(ms->ms_name, name) != 0) { 107 if (name != NULL && strcmp(ms->ms_name, name) != 0) {
107 continue; 108 continue;
108 } 109 }
109 if (ms->ms_required[0] == '\0') { 110 if (ms->ms_required[0] == '\0') {
110 ms->ms_required[0] = '-'; 111 ms->ms_required[0] = '-';
111 ms->ms_required[1] = '\0'; 112 ms->ms_required[1] = '\0';
112 } 113 }
113 if (ms->ms_size == 0) { 114 if (ms->ms_size == 0) {
114 sbuf[0] = '-'; 115 sbuf[0] = '-';
115 sbuf[1] = '\0'; 116 sbuf[1] = '\0';
116 } else { 117 } else {
117 snprintf(sbuf, sizeof(sbuf), "%u", ms->ms_size); 118 snprintf(sbuf, sizeof(sbuf), "%u", ms->ms_size);
118 } 119 }
119 printf("%-16s%s\t%s\t%d\t%s\t%s\n", 120 printf("%-16s %-10s %-10s %-5d %-8s %s\n",
120 ms->ms_name, classes[ms->ms_class], sources[ms->ms_source], 121 ms->ms_name, classes[ms->ms_class], sources[ms->ms_source],
121 ms->ms_refcnt, sbuf, ms->ms_required); 122 ms->ms_refcnt, sbuf, ms->ms_required);
122 } 123 }
123 124
124 exit(EXIT_SUCCESS); 125 exit(EXIT_SUCCESS);
125} 126}
126 127
127static void 128static void
128usage(void) 129usage(void)
129{ 130{
130 131
131 (void)fprintf(stderr, "Usage: %s [-n name]\n", getprogname()); 132 (void)fprintf(stderr, "Usage: %s [-n name]\n", getprogname());
132 exit(EXIT_FAILURE); 133 exit(EXIT_FAILURE);