improve GFX2_LogHexDump() : dont print consecutive 00's lines

This commit is contained in:
Thomas Bernard 2019-12-06 00:10:45 +01:00
parent fea7ac6a3c
commit 06d69ac90a
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C

View File

@ -87,36 +87,62 @@ extern void GFX2_LogHexDump(GFX2_Log_priority_T priority, const char * header, c
{ {
char line[128]; char line[128];
long i; long i;
int previous_allzero_count = 0;
while (count > 0) while (count > 0)
{ {
int p = 0, r; int p = 0, r;
r = snprintf(line + p, sizeof(line) - p, "%s%06lX:", header, offset); int allzero = 1;
if (r < 0)
return;
p += r;
for (i = 0; i < count && i < 16; i++) for (i = 0; i < count && i < 16; i++)
{ {
r = snprintf(line + p, sizeof(line) - p, " %02x", data[offset+i]); if (data[offset+i] != 0)
{
allzero = 0;
break;
}
}
if (previous_allzero_count && allzero)
{
// prints a single "*" for multiple line of 00's
if (previous_allzero_count == 1)
GFX2_Log(priority, "*\n");
}
else
{
r = snprintf(line + p, sizeof(line) - p, "%s%06lX:", header, offset);
if (r < 0) if (r < 0)
return; return;
p += r; p += r;
if (i == 7) for (i = 0; i < count && i < 16; i++)
line[p++] = ' '; {
r = snprintf(line + p, sizeof(line) - p, " %02x", data[offset+i]);
if (r < 0)
return;
p += r;
if (i == 7)
line[p++] = ' ';
}
if (i < 16)
{
if (i < 7)
line[p++] = ' ';
memset(line + p, ' ', 3 * (16 - i));
p += 3 * (16 - i);
}
line[p++] = ' ';
line[p++] = '|';
for (i = 0; i < count && i < 16; i++)
line[p++] = data[offset+i]>=32 && data[offset+i]<127 ? data[offset+i] : '.';
line[p++] = '\0';
GFX2_Log(priority, "%s\n", line);
} }
if (i < 16) if (allzero)
{ previous_allzero_count++;
if (i < 7) else
line[p++] = ' '; previous_allzero_count = 0;
memset(line + p, ' ', 3 * (16 - i));
p += 3 * (16 - i);
}
line[p++] = ' ';
line[p++] = '|';
for (i = 0; i < count && i < 16; i++)
line[p++] = data[offset+i]>=32 && data[offset+i]<127 ? data[offset+i] : '.';
line[p++] = '\0';
GFX2_Log(priority, "%s\n", line);
count -= i; count -= i;
offset += i; offset += i;
} }
// print the ending offset if there was "*"
if (previous_allzero_count > 1)
GFX2_Log(priority, "%s%06lX\n", header, offset);
} }