Module Name: src Committed By: christos Date: Sat Dec 9 00:51:52 UTC 2017
Modified Files: src/sys/lib/libkern: hexdump.c libkern.h Log Message: Even smaller and takes print function. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/lib/libkern/hexdump.c cvs rdiff -u -r1.125 -r1.126 src/sys/lib/libkern/libkern.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/lib/libkern/hexdump.c diff -u src/sys/lib/libkern/hexdump.c:1.3 src/sys/lib/libkern/hexdump.c:1.4 --- src/sys/lib/libkern/hexdump.c:1.3 Fri Dec 8 18:57:57 2017 +++ src/sys/lib/libkern/hexdump.c Fri Dec 8 19:51:52 2017 @@ -27,15 +27,17 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hexdump.c,v 1.3 2017/12/08 23:57:57 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hexdump.c,v 1.4 2017/12/09 00:51:52 christos Exp $"); #ifdef DEBUG_HEXDUMP #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> +#define RET int static const char hexdigits[] = "0123456789abcdef"; #else +#define RET void #include <lib/libkern/libkern.h> #include <sys/systm.h> #endif @@ -46,20 +48,20 @@ static const char hexdigits[] = "0123456 #define NL (BAR + 18) void -hexdump(const char *msg, const void *ptr, size_t len) +hexdump(RET (*pr)(const char *, ...) __printflike(1, 2), const char *msg, + const void *ptr, size_t len) { size_t i, p, q; const unsigned char *u = ptr; char buf[NL + 2]; if (msg) - printf("%s: %zu bytes @ %p\n", msg, len, ptr); + (*pr)("%s: %zu bytes @ %p\n", msg, len, ptr); buf[BAR] = '|'; buf[BAR + 1] = ' '; buf[NL] = '\n'; buf[NL + 1] = '\0'; - memset(buf, ' ', BAR); for (q = p = i = 0; i < len; i++) { unsigned char c = u[i]; buf[p++] = hexdigits[(c >> 4) & 0xf]; @@ -72,14 +74,15 @@ hexdump(const char *msg, const void *ptr if (q == 16) { q = p = 0; - printf("%s", buf); - memset(buf, ' ', BAR); + (*pr)("%s", buf); } } if (q) { + while (p < BAR) + buf[p++] = ' '; buf[ASC + q++] = '\n'; buf[ASC + q] = '\0'; - printf("%s", buf); + (*pr)("%s", buf); } } @@ -87,7 +90,7 @@ hexdump(const char *msg, const void *ptr int main(int argc, char *argv[]) { - hexdump("foo", main, atoi(argv[1])); + hexdump(printf, "foo", main, atoi(argv[1])); return 0; } #endif Index: src/sys/lib/libkern/libkern.h diff -u src/sys/lib/libkern/libkern.h:1.125 src/sys/lib/libkern/libkern.h:1.126 --- src/sys/lib/libkern/libkern.h:1.125 Fri Dec 8 16:51:07 2017 +++ src/sys/lib/libkern/libkern.h Fri Dec 8 19:51:52 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: libkern.h,v 1.125 2017/12/08 21:51:07 christos Exp $ */ +/* $NetBSD: libkern.h,v 1.126 2017/12/09 00:51:52 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -448,7 +448,8 @@ intmax_t strtoi(const char * __restrict, intmax_t, int *); uintmax_t strtou(const char * __restrict, char ** __restrict, int, uintmax_t, uintmax_t, int *); -void hexdump(const char *, const void *, size_t); +void hexdump(void (*)(const char *, ...) __printflike(1, 2), + const char *, const void *, size_t); int snprintb(char *, size_t, const char *, uint64_t); int snprintb_m(char *, size_t, const char *, uint64_t, size_t);