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

Reply via email to