]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
libext2fs: fix obvious big-endian bugs introduced by 64-bit changes
authorTheodore Ts'o <tytso@mit.edu>
Fri, 30 Jul 2010 22:41:47 +0000 (18:41 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 30 Jul 2010 22:41:47 +0000 (18:41 -0400)
These patches fix obvious bone-headed mistakes, so e2fsprogs will now
build and mostly work on powerpc.  The m_meta_bg, u_mke2fs, and
u_tune2fs tests are still failing, however, so there's still work to do...

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/openfs.c
lib/ext2fs/swapfs.c

index 50aa207efa34b40b82033cf12c24b8a524608263..a0269c73638071a4c3405a704c40a192b70f4582 100644 (file)
@@ -321,8 +321,10 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                        goto cleanup;
 #ifdef WORDS_BIGENDIAN
                gdp = (struct ext2_group_desc *) dest;
-               for (j=0; j < groups_per_block*first_meta_bg; j++)
-                       ext2fs_swap_group_desc2(fs, gdp++);
+               for (j=0; j < groups_per_block*first_meta_bg; j++) {
+                       gdp = ext2fs_group_desc(fs, fs->group_desc, j);
+                       ext2fs_swap_group_desc2(fs, gdp);
+               }
 #endif
                dest += fs->blocksize*first_meta_bg;
        }
@@ -334,7 +336,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
 #ifdef WORDS_BIGENDIAN
                for (j=0; j < groups_per_block; j++) {
                        /* The below happens to work... be careful. */
-                       gdp = ext2fs_group_desc(fs, blk, j);
+                       gdp = ext2fs_group_desc(fs, fs->group_desc, j);
                        ext2fs_swap_group_desc2(fs, gdp);
                }
 #endif
index 619bd2d5ec693f4b02f3c67f9f4443326b698afb..de7585c1794d9a5886644872dd30d891e466a111 100644 (file)
@@ -72,7 +72,7 @@ void ext2fs_swap_super(struct ext2_super_block * sb)
        sb->s_flags = ext2fs_swab32(sb->s_flags);
        sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written);
        sb->s_snapshot_inum = ext2fs_swab32(sb->s_snapshot_inum);
-       sb->s_snapshot_id = ext2fs_swab32(s_snapshot_id);
+       sb->s_snapshot_id = ext2fs_swab32(sb->s_snapshot_id);
        sb->s_snapshot_r_blocks_count =
                ext2fs_swab64(sb->s_snapshot_r_blocks_count);
        sb->s_snapshot_list = ext2fs_swab32(sb->s_snapshot_list);
@@ -107,7 +107,8 @@ void ext2fs_swap_group_desc2(ext2_filsys fs, struct ext2_group_desc *gdp)
        gdp->bg_itable_unused = ext2fs_swab16(gdp->bg_itable_unused);
        gdp->bg_checksum = ext2fs_swab16(gdp->bg_checksum);
        /* If we're 32-bit, we're done */
-       if (fs && (!fs->super->s_desc_size >= EXT2_MIN_DESC_SIZE_64BIT))
+       if (fs && (!fs->super->s_desc_size ||
+                  (fs->super->s_desc_size < EXT2_MIN_DESC_SIZE_64BIT)))
                return;
 
        /* Swap the 64-bit parts */