qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

hexdump.c (1734B)


      1 /*
      2  * Helper to hexdump a buffer
      3  *
      4  * Copyright (c) 2013 Red Hat, Inc.
      5  * Copyright (c) 2013 Gerd Hoffmann <kraxel@redhat.com>
      6  * Copyright (c) 2013 Peter Crosthwaite <peter.crosthwaite@xilinx.com>
      7  * Copyright (c) 2013 Xilinx, Inc
      8  *
      9  * This work is licensed under the terms of the GNU GPL, version 2.  See
     10  * the COPYING file in the top-level directory.
     11  *
     12  * Contributions after 2012-01-13 are licensed under the terms of the
     13  * GNU GPL, version 2 or (at your option) any later version.
     14  */
     15 
     16 #include "qemu/osdep.h"
     17 #include "qemu/cutils.h"
     18 
     19 void qemu_hexdump_line(char *line, unsigned int b, const void *bufptr,
     20                        unsigned int len, bool ascii)
     21 {
     22     const char *buf = bufptr;
     23     int i, c;
     24 
     25     if (len > QEMU_HEXDUMP_LINE_BYTES) {
     26         len = QEMU_HEXDUMP_LINE_BYTES;
     27     }
     28 
     29     line += snprintf(line, 6, "%04x:", b);
     30     for (i = 0; i < QEMU_HEXDUMP_LINE_BYTES; i++) {
     31         if ((i % 4) == 0) {
     32             *line++ = ' ';
     33         }
     34         if (i < len) {
     35             line += sprintf(line, " %02x", (unsigned char)buf[b + i]);
     36         } else {
     37             line += sprintf(line, "   ");
     38         }
     39     }
     40     if (ascii) {
     41         *line++ = ' ';
     42         for (i = 0; i < len; i++) {
     43             c = buf[b + i];
     44             if (c < ' ' || c > '~') {
     45                 c = '.';
     46             }
     47             *line++ = c;
     48         }
     49     }
     50     *line = '\0';
     51 }
     52 
     53 void qemu_hexdump(FILE *fp, const char *prefix,
     54                   const void *bufptr, size_t size)
     55 {
     56     unsigned int b, len;
     57     char line[QEMU_HEXDUMP_LINE_LEN];
     58 
     59     for (b = 0; b < size; b += QEMU_HEXDUMP_LINE_BYTES) {
     60         len = size - b;
     61         qemu_hexdump_line(line, b, bufptr, len, true);
     62         fprintf(fp, "%s: %s\n", prefix, line);
     63     }
     64 
     65 }