[git commit] fsck_minix,mkfs_minix: fix "strict-aliasing" warnings

Denys Vlasenko vda.linux at googlemail.com
Wed Aug 16 09:53:48 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=dce39c98944ec6570dee5afc1e2edb16f87c1546
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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 6080489..c4612f2 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 88647e9..69dfcd1 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;


More information about the busybox-cvs mailing list