inode->size_hi = to_le32(size >> 32);
}
+uint32_t
+ext4_inode_get_checksum(struct ext4_sblock *sb, struct ext4_inode *inode)
+{
+ uint16_t inode_size = ext4_get16(sb, inode_size);
+ uint32_t v = to_le16(inode->osd2.linux2.checksum_lo);
+
+ if (inode_size > EXT4_GOOD_OLD_INODE_SIZE)
+ v |= ((uint32_t)to_le16(inode->checksum_hi)) << 16;
+
+ return v;
+}
+
+void
+ext4_inode_set_checksum(struct ext4_sblock *sb, struct ext4_inode *inode,
+ uint32_t checksum)
+{
+ uint16_t inode_size = ext4_get16(sb, inode_size);
+ inode->osd2.linux2.checksum_lo =
+ to_le16((checksum << 16) >> 16);
+
+ if (inode_size > EXT4_GOOD_OLD_INODE_SIZE)
+ inode->checksum_hi = to_le16(checksum >> 16);
+
+}
+
uint32_t ext4_inode_get_access_time(struct ext4_inode *inode)
{
return to_le32(inode->access_time);
inode->generation = to_le32(gen);
}
+uint16_t ext4_inode_get_extra_isize(struct ext4_inode *inode)
+{
+ return to_le16(inode->extra_isize);
+}
+
+void ext4_inode_set_extra_isize(struct ext4_inode *inode, uint16_t size)
+{
+ inode->extra_isize = to_le16(size);
+}
+
uint64_t ext4_inode_get_file_acl(struct ext4_inode *inode,
struct ext4_sblock *sb)
{
inode->blocks[idx + EXT4_INODE_INDIRECT_BLOCK] = to_le32(block);
}
+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);
+}
+
bool ext4_inode_is_type(struct ext4_sblock *sb, struct ext4_inode *inode,
uint32_t type)
{
- return (ext4_inode_get_mode(sb, inode) & EXT4_INODE_MODE_TYPE_MASK) ==
- type;
+ return ext4_inode_type(sb, inode) == type;
}
bool ext4_inode_has_flag(struct ext4_inode *inode, uint32_t f)
return false;
if ((ext4_inode_is_type(sb, inode, EXT4_INODE_MODE_FILE)) ||
- (ext4_inode_is_type(sb, inode, EXT4_INODE_MODE_DIRECTORY)))
+ (ext4_inode_is_type(sb, inode, EXT4_INODE_MODE_DIRECTORY)) ||
+ (ext4_inode_is_type(sb, inode, EXT4_INODE_MODE_SOFTLINK)))
return true;
return false;