diff options
author | NeilBrown <neilb@suse.de> | 2013-05-28 16:43:03 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-05-28 16:43:03 +1000 |
commit | d6e4b44fdbd489e5e8ff1bbcaf17315131182ca3 (patch) | |
tree | 3494b944b07c27a82ebf274c888a27d18c422573 /super1.c | |
parent | 5e1863d49d4643135728803c5197af611787652e (diff) |
super1: fix some casts of signed superblock fields.
These need to be cast to uint32_t before being cast to 'long', else
sign extension doesn't happen on 64bit hosts.
And bitmap_offset is le32, not le64 !!
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super1.c')
-rw-r--r-- | super1.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -404,7 +404,7 @@ static void examine_super1(struct supertype *st, char *homehost) if (sb->bblog_size && sb->bblog_offset) { printf(" Bad Block Log : %d entries available at offset %ld sectors", __le16_to_cpu(sb->bblog_size)*512/8, - (long)__le32_to_cpu(sb->bblog_offset)); + (long)(int32_t)__le32_to_cpu(sb->bblog_offset)); if (sb->feature_map & __cpu_to_le32(MD_FEATURE_BAD_BLOCKS)) printf(" - bad blocks present."); @@ -1182,7 +1182,7 @@ static int update_super1(struct supertype *st, struct mdinfo *info, */ unsigned long long sb_offset = __le64_to_cpu(sb->super_offset); unsigned long long data_offset = __le64_to_cpu(sb->data_offset); - long bitmap_offset = (long)__le64_to_cpu(sb->bitmap_offset); + long bitmap_offset = (long)(int32_t)__le32_to_cpu(sb->bitmap_offset); long bm_sectors = 0; long space; |