mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
a1051f8ea8
Otherwise the function will only displays the first 256 ASCII representation of the bytes in a loop Signed-off-by: Dylan Laduranty <dylan.laduranty@mesotic.com>
65 lines
1.5 KiB
C
65 lines
1.5 KiB
C
/*
|
|
* Copyright (C) 2014 Martine Lenders <mlenders@inf.fu-berlin.de>
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
|
|
/**
|
|
* @{
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <ctype.h>
|
|
|
|
#include "fmt.h"
|
|
|
|
#include "od.h"
|
|
|
|
void od_hex_dump_ext(const void *data, size_t data_len, uint8_t width, uint32_t offset)
|
|
{
|
|
print_u32_hex(offset);
|
|
|
|
if (width == 0) {
|
|
width = OD_WIDTH_DEFAULT;
|
|
}
|
|
#if MODULE_OD_STRING
|
|
size_t str_pos = 0;
|
|
#endif
|
|
for (unsigned int i = 0; i < data_len; i++) {
|
|
print_str(" ");
|
|
print_byte_hex(((uint8_t *)data)[i]);
|
|
|
|
if ((((i + 1) % width) == 0) || i == (data_len - 1)) {
|
|
#if MODULE_OD_STRING
|
|
/* fill in whitespace for incomplete hex lines */
|
|
for (unsigned j = i; ((j + 1) % width) != 0; ++j) {
|
|
print_str(" ");
|
|
}
|
|
print_str(" ");
|
|
for (unsigned k = 0; k < (i % width) + 1; k++){
|
|
if (isprint(((uint8_t *)data)[str_pos+k])) {
|
|
putchar(((uint8_t *)data)[str_pos+k]);
|
|
}
|
|
else {
|
|
putchar('.');
|
|
}
|
|
}
|
|
/* safe position for next iteration */
|
|
str_pos = i + 1;
|
|
#endif
|
|
putchar('\n');
|
|
|
|
if (i != (data_len - 1)) {
|
|
print_u32_hex((uint32_t)(offset + i + 1));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/** @} */
|