31#if defined(INFIX_DEBUG_ENABLED) && INFIX_DEBUG_ENABLED
35#if defined(DBLTAP_ENABLE) && defined(DBLTAP_IMPLEMENTATION)
43 printf("# " __VA_ARGS__); \
67void infix_dump_hex(
const void * data,
size_t size,
const char * title) {
68 const uint8_t *
byte = (
const uint8_t *)data;
74 note(
"%s (size: %llu bytes at %p)", title, (
unsigned long long)size, data);
76 for (
size_t i = 0; i < size; i += 16) {
78 remaining_len =
sizeof(line_buf);
81 written = snprintf(buf_ptr, remaining_len,
"0x%04llx: ", (
unsigned long long)i);
82 if (written < 0 || (
size_t)written >= remaining_len)
85 remaining_len -= written;
88 for (
size_t j = 0; j < 16; ++j) {
90 written = snprintf(buf_ptr, remaining_len,
"%02x ",
byte[i + j]);
92 written = snprintf(buf_ptr, remaining_len,
" ");
93 if (written < 0 || (
size_t)written >= remaining_len)
96 remaining_len -= written;
99 written = snprintf(buf_ptr, remaining_len,
" ");
100 if (written < 0 || (
size_t)written >= remaining_len)
103 remaining_len -= written;
107 written = snprintf(buf_ptr, remaining_len,
"| ");
108 if (written < 0 || (
size_t)written >= remaining_len)
111 remaining_len -= written;
114 for (
size_t j = 0; j < 16; ++j) {
116 if (
byte[i + j] >= 32 &&
byte[i + j] <= 126)
117 written = snprintf(buf_ptr, remaining_len,
"%c",
byte[i + j]);
119 written = snprintf(buf_ptr, remaining_len,
".");
120 if (written < 0 || (
size_t)written >= remaining_len)
123 remaining_len -= written;
127 note(
" %s", line_buf);
129 note(
"End of %s", title);
A lightweight, single-header TAP (Test Anything Protocol) library.
#define note(...)
Definition double_tap.h:181
A header for conditionally compiled debugging utilities.
static void infix_dump_hex(c23_maybe_unused const void *data, c23_maybe_unused size_t size, c23_maybe_unused const char *title)
Definition utility.h:122