mirror of https://gitee.com/openkylin/qemu.git
iov: Factor out hexdumper
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> Message-id: faaac219c55ea586d3f748befaf5a2788fd271b8.1361853677.git.peter.crosthwaite@xilinx.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
9c7d489379
commit
6ff66f50f0
|
@ -442,4 +442,10 @@ int64_t pow2floor(int64_t value);
|
||||||
int uleb128_encode_small(uint8_t *out, uint32_t n);
|
int uleb128_encode_small(uint8_t *out, uint32_t n);
|
||||||
int uleb128_decode_small(const uint8_t *in, uint32_t *n);
|
int uleb128_decode_small(const uint8_t *in, uint32_t *n);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hexdump a buffer to a file. An optional string prefix is added to every line
|
||||||
|
*/
|
||||||
|
|
||||||
|
void hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -9,3 +9,4 @@ util-obj-y += error.o qemu-error.o
|
||||||
util-obj-$(CONFIG_POSIX) += compatfd.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 += 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 += qemu-option.o qemu-progress.o
|
||||||
|
util-obj-y += hexdump.o
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Helper to hexdump a buffer
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013 Red Hat, Inc.
|
||||||
|
* Copyright (c) 2013 Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
* Copyright (c) 2013 Peter Crosthwaite <peter.crosthwaite@xilinx.com>
|
||||||
|
* Copyright (c) 2013 Xilinx, Inc
|
||||||
|
*
|
||||||
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||||
|
* the COPYING file in the top-level directory.
|
||||||
|
*
|
||||||
|
* Contributions after 2012-01-13 are licensed under the terms of the
|
||||||
|
* GNU GPL, version 2 or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qemu-common.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");
|
||||||
|
}
|
||||||
|
}
|
34
util/iov.c
34
util/iov.c
|
@ -201,32 +201,18 @@ 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,
|
void iov_hexdump(const struct iovec *iov, const unsigned int iov_cnt,
|
||||||
FILE *fp, const char *prefix, size_t limit)
|
FILE *fp, const char *prefix, size_t limit)
|
||||||
{
|
{
|
||||||
unsigned int i, v, b;
|
int v;
|
||||||
uint8_t *c;
|
size_t size = 0;
|
||||||
|
char *buf;
|
||||||
|
|
||||||
c = iov[0].iov_base;
|
for (v = 0; v < iov_cnt; v++) {
|
||||||
for (i = 0, v = 0, b = 0; b < limit; i++, b++) {
|
size += iov[v].iov_len;
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
size = size > limit ? limit : size;
|
||||||
|
buf = g_malloc(size);
|
||||||
|
iov_to_buf(iov, iov_cnt, 0, buf, size);
|
||||||
|
hexdump(buf, fp, prefix, size);
|
||||||
|
g_free(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned iov_copy(struct iovec *dst_iov, unsigned int dst_iov_cnt,
|
unsigned iov_copy(struct iovec *dst_iov, unsigned int dst_iov_cnt,
|
||||||
|
|
Loading…
Reference in New Issue