[syslinux] [Syslinux] [PATCH] [RFC] lib: add a hex dump lib function

Liu Aleaxander aleaxander at gmail.com
Thu Dec 10 06:59:39 PST 2009


Hi all,

Date: Thu, 10 Dec 2009 22:55:20 +0800
Subject: [PATCH] [RFC] lib: add a hex dump lib function

I think it would be better to have a hex dump routine; it would make
debugging much easier since it can dump the data, like fs meta data,
in a hex style, just like what the 'hexdump -C file' command does.

BTW, I'm not sure where should I to put the hexdump function declaration.
For now, I just put it in stdio.h, since I think it's a little better than
adding a new hexdump.h

Signed-off-by: Liu Aleaxander <Aleaxander at gmail.com>
---
 com32/include/stdio.h |    2 ++
 com32/lib/Makefile    |    2 +-
 com32/lib/hexdump.c   |   42 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 45 insertions(+), 1 deletions(-)
 create mode 100644 com32/lib/hexdump.c

diff --git a/com32/include/stdio.h b/com32/include/stdio.h
index f37bdd9..731ebe8 100644
--- a/com32/include/stdio.h
+++ b/com32/include/stdio.h
@@ -114,4 +114,6 @@ __extern void perror(const char *);

 __extern int rename(const char *, const char *);

+__extern void hexdump(const void *, int, int);
+
 #endif /* _STDIO_H */
diff --git a/com32/lib/Makefile b/com32/lib/Makefile
index c5b1981..50fd07f 100644
--- a/com32/lib/Makefile
+++ b/com32/lib/Makefile
@@ -25,7 +25,7 @@ LIBOBJS = \
 	strtoimax.o strtok.o strtol.o strtoll.o strtoul.o strtoull.o	\
 	strtoumax.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o		\
 	asprintf.o vasprintf.o strlcpy.o strlcat.o			\
-	vsscanf.o zalloc.o						\
+	vsscanf.o zalloc.o hexdump.o					\
 	\
 	opendir.o readdir.o closedir.o getcwd.o chdir.o fdopendir.o	\
 	\
diff --git a/com32/lib/hexdump.c b/com32/lib/hexdump.c
new file mode 100644
index 0000000..04edbcf
--- /dev/null
+++ b/com32/lib/hexdump.c
@@ -0,0 +1,42 @@
+/*
+ * The hex dump lib.
+ *
+ * Copyright (C) 2009 Liu Aleaxander -- All rights reserved. This file
+ * may be redistributed under the terms of the GNU Public License.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+void hexdump(const void *data, int len, int base)
+{
+    int i = 0;
+    int index = 0;
+    uint8_t *p = data;
+    uint8_t hex[16 * 3 + 1] = {0, };
+    uint8_t text[16 + 1] = {0, };
+    uint8_t c;
+
+    for (i = 0; i < len; i++) {
+	index = i & 0xf;
+	if (i && index == 0) {
+	    /* print the buffer before reset it */
+	    printf("%08x  %-48s  |%-16s|\n", base, hex, text);
+	    base += 0x10;
+	    memset(hex, 0, sizeof hex);
+	    memset(text, 0, sizeof text);
+	}
+
+	c = *p++;
+	sprintf((char *)&hex[index * 3], "%02x ", c);
+	if (c < 0x20 || c > 0x7f)
+	    text[index] = '.';
+	else
+	    text[index] = c;
+    }
+
+    /* print the last part */
+    printf("%08x  %-48s  |%-16s|\n", base, hex, text);
+}
-- 
1.6.4.1


-- 
regards
Liu Aleaxander




More information about the Syslinux mailing list