diff options
author | Ruediger Meier | 2016-03-02 22:29:00 +0100 |
---|---|---|
committer | Ruediger Meier | 2016-03-03 09:24:06 +0100 |
commit | fcb1242601d892bc2d2a3b3e85af36280040d2b3 (patch) | |
tree | a4fd2d647f2dd9590152170572846a6ef4414f5c /disk-utils/fsck.minix.c | |
parent | tests: minix, some corrections and cleanup (diff) | |
download | kernel-qcow2-util-linux-fcb1242601d892bc2d2a3b3e85af36280040d2b3.tar.gz kernel-qcow2-util-linux-fcb1242601d892bc2d2a3b3e85af36280040d2b3.tar.xz kernel-qcow2-util-linux-fcb1242601d892bc2d2a3b3e85af36280040d2b3.zip |
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 <ruediger.meier@ga-group.nl>
Diffstat (limited to 'disk-utils/fsck.minix.c')
-rw-r--r-- | disk-utils/fsck.minix.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c index 2058a9798..a040cf51a 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; |