summaryrefslogtreecommitdiffstats
path: root/disk-utils/fsck.minix.c
diff options
context:
space:
mode:
authorRuediger Meier2016-03-02 22:29:00 +0100
committerRuediger Meier2016-03-03 09:24:06 +0100
commitfcb1242601d892bc2d2a3b3e85af36280040d2b3 (patch)
treea4fd2d647f2dd9590152170572846a6ef4414f5c /disk-utils/fsck.minix.c
parenttests: minix, some corrections and cleanup (diff)
downloadkernel-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.c5
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;