Satyam Sharma wrote:
> Hello Randy,
>
>> Add a prefix string parameter. Callers are responsible for any
>> string length/alignment that they want to see in the output. I.e.,
>> callers should pad strings to achieve alignment if they want that.
>>
>> Add rowsize parameter. This is the number of raw data bytes
>> to be printed per line. Must be 16 or 32.
>>
>> Add a group_size parameter. This allows callers to dump values
>> as 1-byte, 2-byte, 4-byte, or 8-byte numbers. Default is
>> 1-byte numbers. If the total length is not an even multiple
>> of group_size, 1-byte numbers are printed.
>
> I wonder if (over-)engineering could hurt its adoption by more kernel
> users. There aren't very many 8-argument monsters in the kernel,
> and one would expect hexdump() to be easier on the fingers to
> type? :-) Why not just continue with reasonable default/fixed rowsize
> and groupsize values?
Yes, one can try to satisfy the users/callers by adapting to their
needs (wishes), which requires parameters or such; or one can have
no callers and end up with (around 11 currently) different hex dump
functions in the kernel source tree, but no users of lib/hexdump.c.
But it won't take much more "requirements" for me to drop the patch.
>> Add an "ascii" output parameter. This causes ASCII data output
>> following the hex data output.
> [...]
>> + if (!ascii)
>> + goto nil;
>> +
>> + if ((lx + 1) < linebuflen)
>> linebuf[lx++] = ' ';
>> - }
>> - for (j = 0; (j < 16) && (j < len) && (lx + 2) < linebuflen; j++)
>> + for (j = 0; (j < rowsize) && (j < len) && (lx + 2) <
>> linebuflen; j++)
>> linebuf[lx++] = isprint(ptr[j]) ? ptr[j] : '.';
>> +nil:
>> linebuf[lx++] = '\0';
>
> if (ascii) {
> ...
> }
>
> linebuf[lx++] = '\0';
>
> would help lose a goto and label.
The label has another reference already, so it wouldn't be lost.