From dce39c98944ec6570dee5afc1e2edb16f87c1546 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 16 Aug 2017 11:53:48 +0200 Subject: [PATCH] fsck_minix,mkfs_minix: fix "strict-aliasing" warnings Signed-off-by: Denys Vlasenko --- util-linux/fsck_minix.c | 9 ++++++--- util-linux/mkfs_minix.c | 11 +++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c index 608048983..c4612f251 100644 --- a/util-linux/fsck_minix.c +++ b/util-linux/fsck_minix.c @@ -173,7 +173,10 @@ struct globals { /* Bigger stuff */ struct termios sv_termios; - char superblock_buffer[BLOCK_SIZE]; + union { + char superblock_buffer[BLOCK_SIZE]; + struct minix_superblock Super; + } u; char add_zone_ind_blk[BLOCK_SIZE]; char add_zone_dind_blk[BLOCK_SIZE]; IF_FEATURE_MINIX2(char add_zone_tind_blk[BLOCK_SIZE];) @@ -207,7 +210,7 @@ struct globals { #define name_depth (G.name_depth ) #define name_component (G.name_component ) #define sv_termios (G.sv_termios ) -#define superblock_buffer (G.superblock_buffer ) +#define superblock_buffer (G.u.superblock_buffer) #define add_zone_ind_blk (G.add_zone_ind_blk ) #define add_zone_dind_blk (G.add_zone_dind_blk ) #define add_zone_tind_blk (G.add_zone_tind_blk ) @@ -247,7 +250,7 @@ enum { #define Inode1 (((struct minix1_inode *) inode_buffer)-1) #define Inode2 (((struct minix2_inode *) inode_buffer)-1) -#define Super (*(struct minix_superblock *)(superblock_buffer)) +#define Super (G.u.Super) #if ENABLE_FEATURE_MINIX2 # define ZONES ((unsigned)(version2 ? Super.s_zones : Super.s_nzones)) diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c index 88647e9d8..69dfcd123 100644 --- a/util-linux/mkfs_minix.c +++ b/util-linux/mkfs_minix.c @@ -142,7 +142,10 @@ struct globals { unsigned currently_testing; char root_block[BLOCK_SIZE]; - char superblock_buffer[BLOCK_SIZE]; + union { + char superblock_buffer[BLOCK_SIZE]; + struct minix_superblock SB; + } u; char boot_block_buffer[512]; unsigned short good_blocks_table[MAX_GOOD_BLOCKS]; /* check_blocks(): buffer[] was the biggest static in entire bbox */ @@ -166,7 +169,7 @@ static ALWAYS_INLINE unsigned div_roundup(unsigned size, unsigned n) #define INODE_BUF1 (((struct minix1_inode*)G.inode_buffer) - 1) #define INODE_BUF2 (((struct minix2_inode*)G.inode_buffer) - 1) -#define SB (*(struct minix_superblock*)G.superblock_buffer) +#define SB (G.u.SB) #define SB_INODES (SB.s_ninodes) #define SB_IMAPS (SB.s_imap_blocks) @@ -234,7 +237,7 @@ static void write_tables(void) xlseek(dev_fd, BLOCK_SIZE, SEEK_SET); msg_eol = "can't write superblock"; - xwrite(dev_fd, G.superblock_buffer, BLOCK_SIZE); + xwrite(dev_fd, G.u.superblock_buffer, BLOCK_SIZE); msg_eol = "can't write inode map"; xwrite(dev_fd, G.inode_map, SB_IMAPS * BLOCK_SIZE); @@ -541,7 +544,7 @@ static void setup_tables(void) unsigned sb_zmaps; unsigned i; - /* memset(G.superblock_buffer, 0, BLOCK_SIZE); */ + /* memset(G.u.superblock_buffer, 0, BLOCK_SIZE); */ /* memset(G.boot_block_buffer, 0, 512); */ SB_MAGIC = G.magic; SB_ZONE_SIZE = 0; -- 2.25.1