
Hi Wolfgang,
Dear Lukasz Majewski,
In message 1399443021-11748-1-git-send-email-l.majewski@samsung.com you wrote:
The current approach set the initial value of crc32 calculation to zero, which is correct for calculating checksum of the whole chunk of data.
...
- if (*output)
memcpy(&crc, output, sizeof(crc));
- crc = crc32_wd(crc, input, ilen, chunk_sz); crc = htonl(crc); memcpy(output, &crc, sizeof(crc));
You can actually remove the "if (*output)" because output has always to be a non-null pointer, as we're going to store the result there.
I think, that the above statement would be correct if I had checked the if (output).
The problem here is that *output refers to uint8 and only first/last byte is checked. This is obviously wrong.
You are right that this check is not needed.
Which means that you cannot use this to implicitly initialize crc =0, whichin turn means you MUST add porper initialization to all callers of that function.
Ok.
Best regards,
Wolfgang Denk