diff options
author | scottl <scottl@FreeBSD.org> | 2003-12-07 05:04:49 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2003-12-07 05:04:49 +0000 |
commit | 2b68e67c6dd54583034d8bfd6d2b87e8de25e973 (patch) | |
tree | 31784046cc55a6806b91e9c61d452431be9a79e0 /sys/kern/subr_prf.c | |
parent | e1402f33051fefa6407e8175f2fc64ed7167a5ff (diff) | |
download | FreeBSD-src-2b68e67c6dd54583034d8bfd6d2b87e8de25e973.zip FreeBSD-src-2b68e67c6dd54583034d8bfd6d2b87e8de25e973.tar.gz |
Re-arrange and consolidate some random debugging stuff
Diffstat (limited to 'sys/kern/subr_prf.c')
-rw-r--r-- | sys/kern/subr_prf.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c index d851e60..7c44341 100644 --- a/sys/kern/subr_prf.c +++ b/sys/kern/subr_prf.c @@ -898,3 +898,56 @@ DB_SHOW_COMMAND(msgbuf, db_show_msgbuf) } #endif /* DDB */ + +void +hexdump(void *ptr, int length, const char *hdr, int flags) +{ + int i, j, k; + int cols; + unsigned char *cp; + char delim; + + if ((flags & HD_DELIM_MASK) != 0) + delim = (flags & HD_DELIM_MASK) >> 8; + else + delim = ' '; + + if ((flags & HD_COLUMN_MASK) != 0) + cols = flags & HD_COLUMN_MASK; + else + cols = 16; + + cp = ptr; + for (i = 0; i < length; i+= cols) { + if (hdr != NULL) + printf("%s", hdr); + + if ((flags & HD_OMIT_COUNT) == 0) + printf("%04x ", i); + + if ((flags & HD_OMIT_HEX) == 0) { + for (j = 0; j < cols; j++) { + k = i + j; + if (k < length) + printf("%c%02x", delim, cp[k]); + else + printf(" "); + } + } + + if ((flags & HD_OMIT_CHARS) == 0) { + printf(" |"); + for (j = 0; j < cols; j++) { + k = i + j; + if (k >= length) + printf(" "); + else if (cp[k] >= ' ' && cp[k] <= '~') + printf("%c", cp[k]); + else + printf("."); + } + printf("|\n"); + } + } +} + |