#include <config.h>
#include "dynamic-string.h"
+#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
*b = temp;
}
+void
+ds_put_hex(struct ds *ds, const void *buf_, size_t size)
+{
+ const uint8_t *buf = buf_;
+ bool printed = false;
+ int i;
+
+ for (i = 0; i < size; i++) {
+ uint8_t val = buf[i];
+ if (val || printed) {
+ if (!printed) {
+ ds_put_format(ds, "0x%"PRIx8, val);
+ } else {
+ ds_put_format(ds, "%02"PRIx8, val);
+ }
+ printed = true;
+ }
+ }
+ if (!printed) {
+ ds_put_char(ds, '0');
+ }
+}
+
/* Writes the 'size' bytes in 'buf' to 'string' as hex bytes arranged 16 per
* line. Numeric offsets are also included, starting at 'ofs' for the first
* byte in 'buf'. If 'ascii' is true then the corresponding ASCII characters
n = end - start;
/* Print line. */
- ds_put_format(ds, "%08jx ", (uintmax_t) ROUND_DOWN(ofs, per_line));
+ ds_put_format(ds, "%08"PRIxMAX" ",
+ (uintmax_t) ROUND_DOWN(ofs, per_line));
for (i = 0; i < start; i++) {
ds_put_format(ds, " ");
}
for (; i < end; i++) {
- ds_put_format(ds, "%02hhx%c",
+ ds_put_format(ds, "%02x%c",
buf[i - start], i == per_line / 2 - 1? '-' : ' ');
}
if (ascii) {