Changeset View
Changeset View
Standalone View
Standalone View
sbin/kldstat/kldstat.c
Show All 23 Lines | |||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include <err.h> | |||||
hselasky: I think these headers where correctly sorted. Can you explain your changes a bit more? | |||||
Done Inline ActionsAccording to style(9), <sys/*.h> headers have to come first. christos: According to style(9), <sys/*.h> headers have to come first. | |||||
#include <libutil.h> | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <unistd.h> | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/module.h> | #include <sys/module.h> | ||||
#include <sys/linker.h> | #include <sys/linker.h> | ||||
#include <err.h> | |||||
#include <libutil.h> | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <strings.h> | #include <strings.h> | ||||
#include <unistd.h> | |||||
#define POINTER_WIDTH ((int)(sizeof(void *) * 2 + 2)) | #define PTR_WIDTH ((int)(sizeof(void *) * 2 + 2)) | ||||
static void printmod(int); | |||||
static void printfile(int, int, int); | |||||
static void usage(void) __dead2; | |||||
static int showdata = 0; | static int showdata = 0; | ||||
static void | static void | ||||
printmod(int modid) | printmod(int modid) | ||||
{ | { | ||||
struct module_stat stat; | struct module_stat stat; | ||||
bzero(&stat, sizeof(stat)); | bzero(&stat, sizeof(stat)); | ||||
stat.version = sizeof(struct module_stat); | stat.version = sizeof(struct module_stat); | ||||
if (modstat(modid, &stat) < 0) | if (modstat(modid, &stat) < 0) { | ||||
warn("can't stat module id %d", modid); | warn("can't stat module id %d", modid); | ||||
else { | return; | ||||
if (showdata) | } | ||||
if (showdata) { | |||||
Not Done Inline ActionsI think multi-line statements should have {}'s around them. Here you've omitted them. hselasky: I think multi-line statements should have {}'s around them. Here you've omitted them. | |||||
Done Inline ActionsFixed. christos: Fixed. | |||||
printf("\t\t%3d %s (%d, %u, 0x%lx)\n", stat.id, | printf("\t\t%3d %s (%d, %u, 0x%lx)\n", stat.id, | ||||
stat.name, stat.data.intval, stat.data.uintval, | stat.name, stat.data.intval, stat.data.uintval, | ||||
stat.data.ulongval); | stat.data.ulongval); | ||||
else | } else | ||||
printf("\t\t%3d %s\n", stat.id, stat.name); | printf("\t\t%3d %s\n", stat.id, stat.name); | ||||
} | } | ||||
} | |||||
static void | static void | ||||
printfile(int fileid, int verbose, int humanized) | printfile(int fileid, int verbose, int humanized) | ||||
{ | { | ||||
struct kld_file_stat stat; | struct kld_file_stat stat; | ||||
int modid; | int modid; | ||||
char buf[5]; | char buf[5]; | ||||
stat.version = sizeof(struct kld_file_stat); | 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); | err(1, "can't stat file id %d", fileid); | ||||
} else { | |||||
if (humanized) { | if (humanized) { | ||||
humanize_number(buf, sizeof(buf), stat.size, | humanize_number(buf, sizeof(buf), stat.size, | ||||
"", HN_AUTOSCALE, HN_DECIMAL | HN_NOSPACE); | "", HN_AUTOSCALE, HN_DECIMAL | HN_NOSPACE); | ||||
printf("%2d %4d %*p %5s %s", | printf("%2d %4d %*p %5s %s", | ||||
stat.id, stat.refs, POINTER_WIDTH, stat.address, | stat.id, stat.refs, PTR_WIDTH, stat.address, | ||||
buf, stat.name); | buf, stat.name); | ||||
} else { | } else { | ||||
printf("%2d %4d %*p %8zx %s", | printf("%2d %4d %*p %8zx %s", | ||||
stat.id, stat.refs, POINTER_WIDTH, stat.address, | stat.id, stat.refs, PTR_WIDTH, stat.address, | ||||
stat.size, stat.name); | stat.size, stat.name); | ||||
} | } | ||||
} | |||||
if (verbose) { | if (verbose) { | ||||
printf(" (%s)\n", stat.pathname); | printf(" (%s)\n", stat.pathname); | ||||
printf("\tContains modules:\n"); | printf("\tContains modules:\n"); | ||||
printf("\t\t Id Name\n"); | printf("\t\t Id Name\n"); | ||||
for (modid = kldfirstmod(fileid); modid > 0; modid = modfnext(modid)) | for (modid = kldfirstmod(fileid); modid > 0; modid = modfnext(modid)) | ||||
printmod(modid); | printmod(modid); | ||||
} else | } else | ||||
printf("\n"); | printf("\n"); | ||||
} | } | ||||
static void | static void __dead2 | ||||
usage(void) | usage(void) | ||||
{ | { | ||||
fprintf(stderr, "usage: kldstat [-d] [-h] [-q] [-v] [-i id] [-n filename]\n"); | fprintf(stderr, "usage: %1$s [-dhqv] [-i id] [-n filename]\n" | ||||
fprintf(stderr, " kldstat [-d] [-q] [-m modname]\n"); | " %1$s [-dq] [-m modname]\n", getprogname()); | ||||
exit(1); | exit(1); | ||||
} | } | ||||
int | int | ||||
main(int argc, char** argv) | main(int argc, char *argv[]) | ||||
{ | { | ||||
int c; | struct module_stat stat; | ||||
int humanized = 0; | int humanized = 0; | ||||
int verbose = 0; | int verbose = 0; | ||||
int fileid = 0; | int fileid = 0; | ||||
int quiet = 0; | int quiet = 0; | ||||
int c, modid; | |||||
char* filename = NULL; | char *filename = NULL; | ||||
char* modname = NULL; | char *modname = NULL; | ||||
char* p; | char *p; | ||||
while ((c = getopt(argc, argv, "dhi:m:n:qv")) != -1) | while ((c = getopt(argc, argv, "dhi:m:n:qv")) != -1) { | ||||
switch (c) { | switch (c) { | ||||
case 'd': | case 'd': | ||||
showdata = 1; | showdata = 1; | ||||
break; | break; | ||||
case 'h': | case 'h': | ||||
humanized = 1; | humanized = 1; | ||||
break; | break; | ||||
case 'i': | case 'i': | ||||
Show All 11 Lines | case 'q': | ||||
quiet = 1; | quiet = 1; | ||||
break; | break; | ||||
case 'v': | case 'v': | ||||
verbose = 1; | verbose = 1; | ||||
break; | break; | ||||
default: | default: | ||||
usage(); | usage(); | ||||
} | } | ||||
} | |||||
argc -= optind; | argc -= optind; | ||||
argv += optind; | argv += optind; | ||||
if (argc != 0) | if (argc != 0) | ||||
usage(); | usage(); | ||||
if (modname != NULL) { | if (modname != NULL) { | ||||
int modid; | |||||
struct module_stat stat; | |||||
if ((modid = modfind(modname)) < 0) { | if ((modid = modfind(modname)) < 0) { | ||||
if (!quiet) | if (!quiet) | ||||
warn("can't find module %s", modname); | warn("can't find module %s", modname); | ||||
return 1; | return (1); | ||||
} else if (quiet) { | } else if (quiet) | ||||
return 0; | return (0); | ||||
} | |||||
stat.version = sizeof(struct module_stat); | stat.version = sizeof(struct module_stat); | ||||
if (modstat(modid, &stat) < 0) | if (modstat(modid, &stat) < 0) | ||||
warn("can't stat module id %d", modid); | warn("can't stat module id %d", modid); | ||||
else { | else { | ||||
if (showdata) { | if (showdata) { | ||||
printf("Id Refs Name data..(int, uint, ulong)\n"); | printf("Id Refs Name data..(int, uint, ulong)\n"); | ||||
printf("%3d %4d %s (%d, %u, 0x%lx)\n", | printf("%3d %4d %s (%d, %u, 0x%lx)\n", | ||||
stat.id, stat.refs, stat.name, | stat.id, stat.refs, stat.name, | ||||
stat.data.intval, stat.data.uintval, | stat.data.intval, stat.data.uintval, | ||||
stat.data.ulongval); | stat.data.ulongval); | ||||
} else { | } else { | ||||
printf("Id Refs Name\n"); | printf("Id Refs Name\n"); | ||||
printf("%3d %4d %s\n", stat.id, stat.refs, | printf("%3d %4d %s\n", stat.id, stat.refs, | ||||
stat.name); | stat.name); | ||||
} | } | ||||
} | } | ||||
return 0; | return (0); | ||||
} | } | ||||
if (filename != NULL) { | if (filename != NULL) { | ||||
if ((fileid = kldfind(filename)) < 0) { | if ((fileid = kldfind(filename)) < 0) { | ||||
if (!quiet) | if (!quiet) | ||||
warn("can't find file %s", filename); | warn("can't find file %s", filename); | ||||
return 1; | return (1); | ||||
} else if (quiet) { | } else if (quiet) | ||||
return 0; | return (0); | ||||
} | } | ||||
} | |||||
if (humanized) | if (humanized) { | ||||
printf("Id Refs Address%*c %5s Name\n", POINTER_WIDTH - 7, | printf("Id Refs Address%*c %5s Name\n", PTR_WIDTH - 7, | ||||
' ', "Size"); | ' ', "Size"); | ||||
else | } else { | ||||
printf("Id Refs Address%*c %8s Name\n", POINTER_WIDTH - 7, | printf("Id Refs Address%*c %8s Name\n", PTR_WIDTH - 7, | ||||
' ', "Size"); | ' ', "Size"); | ||||
} | |||||
if (fileid != 0) | if (fileid != 0) | ||||
printfile(fileid, verbose, humanized); | printfile(fileid, verbose, humanized); | ||||
else | else | ||||
for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid)) | for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid)) | ||||
printfile(fileid, verbose, humanized); | printfile(fileid, verbose, humanized); | ||||
return 0; | return (0); | ||||
} | } |
I think these headers where correctly sorted. Can you explain your changes a bit more?