Whamcloud - gitweb
lib/{ext2fs,support}: fix 32-bit Windows build
[tools/e2fsprogs.git] / lib / ext2fs / inode.c
index 2a4be73..957d5aa 100644 (file)
@@ -145,6 +145,12 @@ errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks,
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
+       if (ext2fs_has_feature_journal_dev(fs->super))
+               return EXT2_ET_EXTERNAL_JOURNAL_NOSUPP;
+
+       if (fs->blocksize < 1024)
+               return EXT2_FILSYS_CORRUPTED; /* Should never happen */
+
        /*
         * If fs->badblocks isn't set, then set it --- since the inode
         * scanning functions require it.
@@ -309,6 +315,7 @@ errcode_t ext2fs_inode_scan_goto_blockgroup(ext2_inode_scan scan,
 {
        scan->current_group = group - 1;
        scan->groups_left = scan->fs->group_desc_count - group;
+       scan->bad_block_ptr = 0;
        return get_next_blockgroup(scan);
 }
 
@@ -332,6 +339,12 @@ static errcode_t check_for_inode_bad_blocks(ext2_inode_scan scan,
        if (blk == 0)
                return 0;
 
+       /* Make sure bad_block_ptr is still valid */
+       if (scan->bad_block_ptr >= bb->num) {
+               scan->scan_flags &= ~EXT2_SF_CHK_BADBLOCKS;
+               return 0;
+       }
+
        /*
         * If the current block is greater than the bad block listed
         * in the bad block list, then advance the pointer until this
@@ -758,6 +771,12 @@ errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
+       if (ext2fs_has_feature_journal_dev(fs->super))
+               return EXT2_ET_EXTERNAL_JOURNAL_NOSUPP;
+
+       if (fs->blocksize < 1024)
+               return EXT2_FILSYS_CORRUPTED; /* Should never happen */
+
        /* Check to see if user has an override function */
        if (fs->read_inode &&
            ((bufsize == sizeof(struct ext2_inode)) ||
@@ -887,6 +906,9 @@ errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
+       if (ext2fs_has_feature_journal_dev(fs->super))
+               return EXT2_ET_EXTERNAL_JOURNAL_NOSUPP;
+
        /* Check to see if user provided an override function */
        if (fs->write_inode) {
                retval = (fs->write_inode)(fs, ino, inode);
@@ -903,7 +925,6 @@ errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
                return retval;
 
        if (bufsize < length) {
-               int old_flags = fs->flags;
                retval = ext2fs_read_inode2(fs, ino,
                                            (struct ext2_inode *)w_inode,
                                            length, READ_INODE_NOCSUM);