X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fext4_inode.c;h=513da6015d08b3bd0fab4b818850e9584713889b;hb=fb6fd61f3ec5bc98fab5ad8e0d6fec95c70d643a;hp=9b6eb87650a0e3e879eeb3457db6dace8bc94baa;hpb=a45154a49b743eba4669442e6993c50583329d99;p=lwext4.git diff --git a/src/ext4_inode.c b/src/ext4_inode.c index 9b6eb87..513da60 100644 --- a/src/ext4_inode.c +++ b/src/ext4_inode.c @@ -41,6 +41,10 @@ #include "ext4_config.h" #include "ext4_types.h" +#include "ext4_misc.h" +#include "ext4_errno.h" +#include "ext4_debug.h" + #include "ext4_inode.h" #include "ext4_super.h" @@ -266,14 +270,21 @@ void ext4_inode_set_generation(struct ext4_inode *inode, uint32_t gen) inode->generation = to_le32(gen); } -uint16_t ext4_inode_get_extra_isize(struct ext4_inode *inode) +uint16_t ext4_inode_get_extra_isize(struct ext4_sblock *sb, + struct ext4_inode *inode) { - return to_le16(inode->extra_isize); + if (ext4_sb_feature_ro_com(sb, EXT4_FRO_COM_EXTRA_ISIZE)) + return to_le16(inode->extra_isize); + else + return 0; } -void ext4_inode_set_extra_isize(struct ext4_inode *inode, uint16_t size) +void ext4_inode_set_extra_isize(struct ext4_sblock *sb, + struct ext4_inode *inode, + uint16_t size) { - inode->extra_isize = to_le16(size); + if (ext4_sb_feature_ro_com(sb, EXT4_FRO_COM_EXTRA_ISIZE)) + inode->extra_isize = to_le16(size); } uint64_t ext4_inode_get_file_acl(struct ext4_inode *inode, @@ -317,6 +328,26 @@ void ext4_inode_set_indirect_block(struct ext4_inode *inode, uint32_t idx, inode->blocks[idx + EXT4_INODE_INDIRECT_BLOCK] = to_le32(block); } +uint32_t ext4_inode_get_dev(struct ext4_inode *inode) +{ + uint32_t dev_0, dev_1; + dev_0 = ext4_inode_get_direct_block(inode, 0); + dev_1 = ext4_inode_get_direct_block(inode, 1); + + if (dev_0) + return dev_0; + else + return dev_1; +} + +void ext4_inode_set_dev(struct ext4_inode *inode, uint32_t dev) +{ + if (dev & ~0xFFFF) + ext4_inode_set_direct_block(inode, 1, dev); + else + ext4_inode_set_direct_block(inode, 0, dev); +} + uint32_t ext4_inode_type(struct ext4_sblock *sb, struct ext4_inode *inode) { return (ext4_inode_get_mode(sb, inode) & EXT4_INODE_MODE_TYPE_MASK);