1 /* $NetBSD: main.c,v 1.7 2009/10/02 18:50:14 elad Exp $ */
4 * Copyright (c) 2008 The NetBSD Foundation, Inc.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
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
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
26 * POSSIBILITY OF SUCH DAMAGE.
29 #include <sys/cdefs.h>
31 __RCSID("$NetBSD: main.c,v 1.7 2009/10/02 18:50:14 elad Exp $");
34 #include <sys/module.h>
42 int main(int, char **);
43 static void usage(void) __dead
;
44 static int modstatcmp(const void *, const void *);
46 static const char *classes
[] = {
55 static const char *sources
[] = {
62 main(int argc
, char **argv
)
73 while ((ch
= getopt(argc
, argv
, "n:")) != -1) {
90 iov
.iov_base
= malloc(len
);
92 if (modctl(MODCTL_STAT
, &iov
)) {
93 err(EXIT_FAILURE
, "modctl(MODCTL_STAT)");
95 if (len
>= iov
.iov_len
) {
102 printf("%-16s %-10s %-10s %-5s %-8s %s\n",
103 "NAME", "CLASS", "SOURCE", "REFS", "SIZE", "REQUIRES");
104 len
= iov
.iov_len
/ sizeof(modstat_t
);
105 qsort(iov
.iov_base
, len
, sizeof(modstat_t
), modstatcmp
);
106 for (ms
= iov
.iov_base
; len
!= 0; ms
++, len
--) {
107 if (name
!= NULL
&& strcmp(ms
->ms_name
, name
) != 0) {
110 if (ms
->ms_required
[0] == '\0') {
111 ms
->ms_required
[0] = '-';
112 ms
->ms_required
[1] = '\0';
114 if (ms
->ms_size
== 0) {
118 snprintf(sbuf
, sizeof(sbuf
), "%u", ms
->ms_size
);
120 printf("%-16s %-10s %-10s %-5d %-8s %s\n",
121 ms
->ms_name
, classes
[ms
->ms_class
], sources
[ms
->ms_source
],
122 ms
->ms_refcnt
, sbuf
, ms
->ms_required
);
132 (void)fprintf(stderr
, "Usage: %s [-n name]\n", getprogname());
137 modstatcmp(const void *a
, const void *b
)
139 const modstat_t
*msa
, *msb
;
144 return strcmp(msa
->ms_name
, msb
->ms_name
);