Module Name: src
Committed By: christos
Date: Mon Apr 13 14:39:23 UTC 2009
Modified Files:
src/usr.bin/kdump: kdump.c
Log Message:
Allow kdump to be used as an ioctl decoder if invoked as ioctlname.
To generate a diff of this commit:
cvs rdiff -u -r1.103 -r1.104 src/usr.bin/kdump/kdump.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/kdump/kdump.c
diff -u src/usr.bin/kdump/kdump.c:1.103 src/usr.bin/kdump/kdump.c:1.104
--- src/usr.bin/kdump/kdump.c:1.103 Sun Apr 12 07:23:12 2009
+++ src/usr.bin/kdump/kdump.c Mon Apr 13 10:39:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kdump.c,v 1.103 2009/04/12 11:23:12 lukem Exp $ */
+/* $NetBSD: kdump.c,v 1.104 2009/04/13 14:39:23 christos Exp $ */
/*-
* Copyright (c) 1988, 1993
@@ -39,7 +39,7 @@
#if 0
static char sccsid[] = "@(#)kdump.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: kdump.c,v 1.103 2009/04/12 11:23:12 lukem Exp $");
+__RCSID("$NetBSD: kdump.c,v 1.104 2009/04/13 14:39:23 christos Exp $");
#endif
#endif /* not lint */
@@ -136,6 +136,33 @@
char *cp;
setprogname(argv[0]);
+
+ if (strcmp(getprogname(), "ioctlname") == 0) {
+ int i;
+
+ while ((ch = getopt(argc, argv, "e:")) != -1)
+ switch (ch) {
+ case 'e':
+ emul_name = optarg;
+ break;
+ default:
+ usage();
+ break;
+ }
+ setemul(emul_name, 0, 0);
+ argv += optind;
+ argc -= optind;
+
+ if (argc < 1)
+ usage();
+
+ for (i = 0; i < argc; i++) {
+ ioctldecode(strtoul(argv[i], NULL, 0));
+ (void)putchar('\n');
+ }
+ return 0;
+ }
+
while ((ch = getopt(argc, argv, "e:f:dlm:Nnp:RTt:xX:")) != -1) {
switch (ch) {
case 'e':
@@ -455,9 +482,9 @@
c = (cmd >> 8) & 0xff;
if (isprint(c))
- printf(",_IO%s('%c',", dirbuf, c);
+ printf("_IO%s('%c',", dirbuf, c);
else
- printf(",_IO%s(0x%02x,", dirbuf, c);
+ printf("_IO%s(0x%02x,", dirbuf, c);
output_long(cmd & 0xff, decimal == 0);
if ((cmd & IOC_VOID) == 0) {
putchar(',');
@@ -515,8 +542,10 @@
argcount--;
if ((cp = ioctlname(*ap)) != NULL)
(void)printf(",%s", cp);
- else
+ else {
+ (void)putchar(',');
ioctldecode(*ap);
+ }
ap++;
argcount--;
c = ',';
@@ -1060,9 +1089,13 @@
static void
usage(void)
{
-
- (void)fprintf(stderr, "Usage: %s [-dlNnRT] [-e emulation] "
- "[-f file] [-m maxdata] [-p pid]\n [-t trstr] "
- "[-x | -X size] [file]\n", getprogname());
+ if (strcmp(getprogname(), "ioctlname") == 0) {
+ (void)fprintf(stderr, "Usage: %s [-e emulation] <ioctl> ...\n",
+ getprogname());
+ } else {
+ (void)fprintf(stderr, "Usage: %s [-dlNnRT] [-e emulation] "
+ "[-f file] [-m maxdata] [-p pid]\n [-t trstr] "
+ "[-x | -X size] [file]\n", getprogname());
+ }
exit(1);
}