summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_prf.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1996-01-24 20:56:20 +0000
committerphk <phk@FreeBSD.org>1996-01-24 20:56:20 +0000
commitdefff6cc5b2169d11d666f9ccd9d32a5719a8f28 (patch)
treed93aaa82ad94db88fab389771e7cf7de243a0076 /sys/kern/subr_prf.c
parentb9b02a56e8d92d6cdd5503e3016017907fdd54f7 (diff)
downloadFreeBSD-src-defff6cc5b2169d11d666f9ccd9d32a5719a8f28.zip
FreeBSD-src-defff6cc5b2169d11d666f9ccd9d32a5719a8f28.tar.gz
Remove %r hack, we have vprintf() now.
Add %D for "dumping" data. Good for ethernet/MAC addresses and such. Handle 1 < radix < 37.
Diffstat (limited to 'sys/kern/subr_prf.c')
-rw-r--r--sys/kern/subr_prf.c48
1 files changed, 22 insertions, 26 deletions
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c
index 358ca7c..fdfbd99 100644
--- a/sys/kern/subr_prf.c
+++ b/sys/kern/subr_prf.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)subr_prf.c 8.3 (Berkeley) 1/21/94
- * $Id: subr_prf.c,v 1.25 1996/01/19 21:05:52 phk Exp $
+ * $Id: subr_prf.c,v 1.26 1996/01/22 13:21:33 phk Exp $
*/
#include "opt_ddb.h"
@@ -107,7 +107,8 @@ panic(const char *fmt, ...)
panicstr = fmt;
va_start(ap, fmt);
- printf("panic: %r\n", fmt, ap);
+ printf("panic: ");
+ vprintf(fmt, ap);
va_end(ap);
#ifdef KGDB
@@ -406,25 +407,16 @@ ksprintn(ul, base, lenp)
*
* reg=3<BITTWO,BITONE>
*
- * The format %r passes an additional format string and argument list
- * recursively. Its usage is:
- *
- * fn(char *fmt, ...)
- * {
- * va_list ap;
- * va_start(ap, fmt);
- * printf("prefix: %r: suffix\n", fmt, ap);
- * va_end(ap);
- * }
- *
- * Space or zero padding and a field width are supported for the numeric
- * formats only.
+ * XXX: %D -- Hexdump, takes pointer and separator string:
+ * ("%6D", ptr, ":") -> XX:XX:XX:XX:XX:XX
+ * ("%*D", len, ptr, " " -> XX XX XX XX ...
*/
int
kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_list ap)
{
#define PCHAR(c) {int cc=(c); if (func) (*func)(cc,arg); else *d++ = cc; retval++; }
char *p, *q, *d;
+ u_char *up;
int ch, n;
u_long ul;
int base, lflag, tmp, width, ladjust, sharpflag, neg, sign, dot;
@@ -440,7 +432,7 @@ kvprintf(char const *fmt, void (*func)(int, void*), void *arg, int radix, va_lis
if (fmt == NULL)
fmt = "(fmt null)\n";
- if (radix < 8 || radix > 16)
+ if (radix < 2 || radix > 36)
radix = 10;
for (;;) {
@@ -524,6 +516,20 @@ reswitch: switch (ch = *(u_char *)fmt++) {
case 'c':
PCHAR(va_arg(ap, int));
break;
+ case 'D':
+ up = va_arg(ap, u_char *);
+ p = va_arg(ap, char *);
+ if (!width)
+ width = 16;
+ while(width--) {
+ PCHAR(hex2ascii(*up >> 4));
+ PCHAR(hex2ascii(*up & 0x0f));
+ up++;
+ if (width)
+ for (q=p;*q;q++)
+ PCHAR(*q);
+ }
+ break;
case 'd':
ul = lflag ? va_arg(ap, long) : va_arg(ap, int);
sign = 1;
@@ -546,16 +552,6 @@ reswitch: switch (ch = *(u_char *)fmt++) {
PCHAR('0');
PCHAR('x');
goto number;
- case 'r':
- p = va_arg(ap, char *);
- if (!func) {
- n = kvprintf(p, func, d, radix, ap);
- d += n;
- } else {
- n = kvprintf(p, func, arg, radix, ap);
- }
- retval += n;
- break;
case 's':
p = va_arg(ap, char *);
if (p == NULL)
OpenPOWER on IntegriCloud