From: Ruediger Meier Date: Wed, 2 Mar 2016 21:29:00 +0000 (+0100) Subject: fsck.minix: fix v3 version offset X-Git-Tag: v2.28-rc1~54^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fcb1242601d892bc2d2a3b3e85af36280040d2b3;p=thirdparty%2Futil-linux.git fsck.minix: fix v3 version offset Our test-suite discoverd it on big endian systems, but it was also broken on little endian for inode numbers > 0xffff. Signed-off-by: Ruediger Meier --- diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c index 2058a97984..a040cf51a0 100644 --- a/disk-utils/fsck.minix.c +++ b/disk-utils/fsck.minix.c @@ -1011,13 +1011,14 @@ check_file2(struct minix2_inode *dir, unsigned int offset) { block = map_block2(dir, offset / MINIX_BLOCK_SIZE); read_block(block, blk); name = blk + (offset % MINIX_BLOCK_SIZE) + version_offset; - ino = *(unsigned short *)(name - version_offset); + ino = version_offset == 4 ? *(uint32_t *)(name - version_offset) + : *(uint16_t *)(name - version_offset); if (ino > get_ninodes()) { get_current_name(); printf(_("The directory '%s' contains a bad inode number " "for file '%.*s'."), current_name, (int)namelen, name); if (ask(_(" Remove"), 1)) { - *(unsigned short *)(name - version_offset) = 0; + memset(name - version_offset, 0, version_offset); write_block(block, blk); } ino = 0;