fix bug in (case)

reducing use of strlen
This commit is contained in:
JeffBezanson
2009-03-13 14:54:48 +00:00
parent 0643a4f3a2
commit dceced2bb0
3 changed files with 26 additions and 26 deletions
+6 -9
View File
@@ -12,30 +12,27 @@ static char hexdig[] = "0123456789abcdef";
void hexdump(ios_t *dest, char *buffer, size_t len, size_t startoffs)
{
size_t offs=0;
size_t i, pos, nc;
size_t i, pos;
char ch, linebuffer[16];
char hexc[4];
static char *spc50 = " ";
hexc[2] = hexc[3] = ' ';
do {
ios_printf(dest, "%.8x ", offs+startoffs);
pos = 10;
for(i=0; i < 16 && (offs+i) < len; i++) {
ch = buffer[offs + i];
for(i=0; i < 16 && offs < len; i++, offs++) {
ch = buffer[offs];
linebuffer[i] = (ch<32 || ch>=0x7f) ? '.' : ch;
hexc[0] = hexdig[((unsigned char)ch)>>4];
hexc[1] = hexdig[ch&0x0f];
nc = (i==7 || i==15) ? 4 : 3;
ios_write(dest, hexc, nc);
pos += nc;
pos += ios_write(dest, hexc, (i==7 || i==15) ? 4 : 3);
}
for(; i < 16; i++)
linebuffer[i] = ' ';
for(i=0; i < 60-pos; i++)
ios_putc(' ', dest);
ios_write(dest, spc50, 60-pos);
ios_putc('|', dest);
ios_write(dest, linebuffer, 16);
ios_write(dest, "|\n", 2);
offs += 16;
} while (offs < len);
}