summaryrefslogtreecommitdiffstats
path: root/libfdisk/src
diff options
context:
space:
mode:
Diffstat (limited to 'libfdisk/src')
-rw-r--r--libfdisk/src/bsd.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libfdisk/src/bsd.c b/libfdisk/src/bsd.c
index 90b44b963..4e05bb328 100644
--- a/libfdisk/src/bsd.c
+++ b/libfdisk/src/bsd.c
@@ -736,13 +736,20 @@ done:
static unsigned short bsd_dkcksum (struct bsd_disklabel *lp)
{
- unsigned short *start, *end;
+ unsigned char *ptr, *end;
unsigned short sum = 0;
- start = (unsigned short *) lp;
- end = (unsigned short *) &lp->d_partitions[lp->d_npartitions];
- while (start < end)
- sum ^= *start++;
+ ptr = (unsigned char *) lp;
+ end = (unsigned char *) &lp->d_partitions[lp->d_npartitions];
+
+ while (ptr < end) {
+ unsigned short val;
+
+ memcpy(&val, ptr, sizeof(unsigned short));
+ sum ^= val;
+
+ ptr += sizeof(unsigned short);
+ }
return sum;
}