diff --git a/include/ntfs-3g/endians.h b/include/ntfs-3g/endians.h index b69c2b47..58163a64 100644 --- a/include/ntfs-3g/endians.h +++ b/include/ntfs-3g/endians.h @@ -328,4 +328,6 @@ #define le32_and(a, b) ((a) & (b)) +#define le64_and(a, b) ((a) & (b)) + #endif /* defined _NTFS_ENDIANS_H */ diff --git a/ntfsprogs/ntfsclone.c b/ntfsprogs/ntfsclone.c index 850623f6..1a24b3b3 100644 --- a/ntfsprogs/ntfsclone.c +++ b/ntfsprogs/ntfsclone.c @@ -821,8 +821,8 @@ static void copy_cluster(int rescue, u64 rescue_lcn, u64 lcn) else { mask = const_cpu_to_le64(~0x0ffffffffULL); bs->volume_serial_number - = (volume_serial_number & mask) - | (bs->volume_serial_number & ~mask); + = le64_and(volume_serial_number, mask) + | le64_and(bs->volume_serial_number, ~mask); } /* Show the new full serial after merging */ if (!lcn) diff --git a/ntfsprogs/ntfslabel.c b/ntfsprogs/ntfslabel.c index c0494ab5..bded47b4 100644 --- a/ntfsprogs/ntfslabel.c +++ b/ntfsprogs/ntfslabel.c @@ -258,8 +258,8 @@ static int change_serial(ntfs_volume *vol, u64 sector, le64 serial_number, else { mask = const_cpu_to_le64(~0x0ffffffffULL); bs->volume_serial_number - = (serial_number & mask) - | (bs->volume_serial_number & ~mask); + = le64_and(serial_number, mask) + | le64_and(bs->volume_serial_number, ~mask); } if (opts.noaction || (ntfs_pwrite(vol->dev,