new file mode 100644
@@ -0,0 +1,3 @@
+#include "qemu-common.h"
+
+void hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);
@@ -8,3 +8,4 @@ util-obj-y += error.o qemu-error.o
util-obj-$(CONFIG_POSIX) += compatfd.o
util-obj-y += iov.o aes.o qemu-config.o qemu-sockets.o uri.o notify.o
util-obj-y += qemu-option.o qemu-progress.o
+util-obj-y += hexdump.o
new file mode 100644
@@ -0,0 +1,23 @@
+#include "qemu-common.h"
+#include "qemu/hexdump.h"
+
+void hexdump(const char *buf, FILE *fp, const char *prefix, size_t size)
+{
+ unsigned int b;
+
+ for (b = 0; b < size; b++) {
+ if ((b % 16) == 0) {
+ fprintf(fp, "%s: %04x:", prefix, b);
+ }
+ if ((b % 4) == 0) {
+ fprintf(fp, " ");
+ }
+ fprintf(fp, " %02x", (unsigned char)buf[b]);
+ if ((b % 16) == 15) {
+ fprintf(fp, "\n");
+ }
+ }
+ if ((b % 16) != 0) {
+ fprintf(fp, "\n");
+ }
+}
@@ -17,6 +17,7 @@
*/
#include "qemu/iov.h"
+#include "qemu/hexdump.h"
#ifdef _WIN32
# include <windows.h>
@@ -201,31 +202,11 @@ ssize_t iov_send_recv(int sockfd, struct iovec *iov, unsigned iov_cnt,
void iov_hexdump(const struct iovec *iov, const unsigned int iov_cnt,
FILE *fp, const char *prefix, size_t limit)
{
- unsigned int i, v, b;
- uint8_t *c;
-
- c = iov[0].iov_base;
- for (i = 0, v = 0, b = 0; b < limit; i++, b++) {
- if (i == iov[v].iov_len) {
- i = 0; v++;
- if (v == iov_cnt) {
- break;
- }
- c = iov[v].iov_base;
- }
- if ((b % 16) == 0) {
- fprintf(fp, "%s: %04x:", prefix, b);
- }
- if ((b % 4) == 0) {
- fprintf(fp, " ");
- }
- fprintf(fp, " %02x", c[i]);
- if ((b % 16) == 15) {
- fprintf(fp, "\n");
- }
- }
- if ((b % 16) != 0) {
- fprintf(fp, "\n");
+ int v;
+ for (v = 0; v < iov_cnt && limit; v++) {
+ int size = limit < iov[v].iov_len ? limit : iov[v].iov_len;
+ hexdump(iov[v].iov_base, fp, prefix, size);
+ limit -= size;
}
}
Factor out the hexdumper functionality from iov for all to use. Useful for creating verbose debug printfery that dumps packet data. Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> --- See v9 of the pl330 series for example usage. include/qemu/hexdump.h | 3 +++ util/Makefile.objs | 1 + util/hexdump.c | 23 +++++++++++++++++++++++ util/iov.c | 31 ++++++------------------------- 4 files changed, 33 insertions(+), 25 deletions(-) create mode 100644 include/qemu/hexdump.h create mode 100644 util/hexdump.c