void d(unsigned char *buf, int len, int width, int group)
{
- int i, offset = 0, line_done = 0;
- char ascii[32 + 1];
+ int i, offset = 0;
+ char ascii[32 + 1] = { 0 };
assert(width < sizeof(ascii));
printf(" ");
for (i = 0; i <= 15; i++)
printf("%3x", i);
for (i = 0; i < len; i++) {
- line_done = 0;
if (i % width == 0)
printf( "\n%04x:", offset);
if (i % group == 0)
printf( "%02x", buf[i]);
ascii[i % width] = (buf[i] >= '!' && buf[i] <= '~') ? buf[i] : '.';
if (((i + 1) % width) == 0) {
- ascii[i % width + 1] = '\0';
printf( " \"%.*s\"", width, ascii);
offset += width;
- line_done = 1;
+ memset(ascii, 0, sizeof(ascii));
}
}
- if (!line_done) {
+ if (strlen(ascii)) {
unsigned b = width - (i % width);
- ascii[i % width + 1] = '\0';
- printf( " %*s \"%.*s\"",
- 2 * b + b / group + (b % group ? 1 : 0), "",
- width, ascii);
+ printf( " %*s \"%.*s\"", 2 * b + b / group + (b % group ? 1 : 0), "", width, ascii);
}
printf( "\n");
}