diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2011-07-12 13:35:10 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2011-08-04 15:51:22 +0200 |
commit | 3a1dca94d6dba00fe0fd4c4a28449f57e01b9b6c (patch) | |
tree | 6962d3b2f20e0a9d502887bf41b71694b58806fd | |
parent | fa57ee8ed246cfea53acd09663203deda64b4f33 (diff) | |
download | qemu-3a1dca94d6dba00fe0fd4c4a28449f57e01b9b6c.zip qemu-3a1dca94d6dba00fe0fd4c4a28449f57e01b9b6c.tar.gz qemu-3a1dca94d6dba00fe0fd4c4a28449f57e01b9b6c.tar.bz2 |
Add iov_hexdump()
Useful for debugging purposes.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | iov.c | 31 | ||||
-rw-r--r-- | iov.h | 2 |
2 files changed, 33 insertions, 0 deletions
@@ -73,3 +73,34 @@ size_t iov_size(const struct iovec *iov, const unsigned int iov_cnt) } return len; } + +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"); + } +} @@ -17,3 +17,5 @@ size_t iov_from_buf(struct iovec *iov, unsigned int iov_cnt, size_t iov_to_buf(const struct iovec *iov, const unsigned int iov_cnt, void *buf, size_t iov_off, size_t size); size_t iov_size(const struct iovec *iov, const unsigned int iov_cnt); +void iov_hexdump(const struct iovec *iov, const unsigned int iov_cnt, + FILE *fp, const char *prefix, size_t limit); |