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);