libfdisk: (sgi) improve checksum calculation [-Waddress-of-packed-member]

Let's keep compilers and static analyzers happy. The idea is to use
memcpy() to copy from buffer to variable and use all label as unsigned
char rather than vectorize by uint32_t.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2019-05-22 17:42:48 +02:00
parent 34b0a305f6
commit 1a56f15b0f
1 changed files with 11 additions and 6 deletions

View File

@ -93,15 +93,20 @@ struct sgi_disklabel {
static inline uint32_t sgi_pt_checksum(struct sgi_disklabel *label)
{
int i;
uint32_t *ptr = (uint32_t *) label;
int count;
uint32_t sum = 0;
unsigned char *ptr = (unsigned char *) label;
i = sizeof(*label) / sizeof(*ptr);
count = sizeof(*label) / sizeof(uint32_t);
ptr += sizeof(uint32_t) * (count - 1);
while (i) {
i--;
sum -= be32_to_cpu(ptr[i]);
while (count--) {
uint32_t val;
memcpy(&val, ptr, sizeof(uint32_t));
sum -= be32_to_cpu(val);
ptr -= sizeof(uint32_t);
}
return sum;