]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fsck.minix: fix v3 version offset
authorRuediger Meier <ruediger.meier@ga-group.nl>
Wed, 2 Mar 2016 21:29:00 +0000 (22:29 +0100)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Thu, 3 Mar 2016 08:24:06 +0000 (09:24 +0100)
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 <ruediger.meier@ga-group.nl>
disk-utils/fsck.minix.c

index 2058a97984e13302febf77562ecffb7172970489..a040cf51a0767bf88ca8ea690edd51c84ac51b78 100644 (file)
@@ -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;