#include <ext4_inode.h>\r
#include <ext4_super.h>\r
\r
+/**@brief Compute number of bits for block count.\r
+ * @param block_size Filesystem block_size\r
+ * @return Number of bits\r
+ */\r
static uint32_t ext4_inode_block_bits_count(uint32_t block_size)\r
{\r
uint32_t bits = 8;\r
return bits;\r
}\r
\r
-\r
uint32_t ext4_inode_get_mode(struct ext4_sblock *sb, struct ext4_inode *inode)\r
{\r
uint32_t v = to_le16(inode->mode);\r
return v;\r
}\r
\r
-void ext4_inode_set_mode(struct ext4_sblock *sb, struct ext4_inode *inode,\r
+void ext4_inode_set_mode(struct ext4_sblock *sb, struct ext4_inode *inode,\r
uint32_t mode)\r
{\r
inode->mode = to_le16((mode << 16) >> 16);\r
inode->osd2.hurd2.mode_high = to_le16(mode >> 16);\r
}\r
\r
-\r
-\r
uint32_t ext4_inode_get_uid(struct ext4_inode *inode)\r
{\r
return to_le32(inode->uid);\r
}\r
\r
-void ext4_inode_set_uid(struct ext4_inode *inode, uint32_t uid)\r
+void ext4_inode_set_uid(struct ext4_inode *inode, uint32_t uid)\r
{\r
inode->uid = to_le32(uid);\r
}\r
\r
-\r
uint64_t ext4_inode_get_size(struct ext4_sblock *sb, struct ext4_inode *inode)\r
{\r
uint64_t v = to_le32(inode->size_lo);\r
return v;\r
}\r
\r
-void ext4_inode_set_size(struct ext4_inode *inode, uint64_t size)\r
+void ext4_inode_set_size(struct ext4_inode *inode, uint64_t size)\r
{\r
inode->size_lo = to_le32((size << 32) >> 32);\r
inode->size_hi = to_le32(size >> 32);\r
}\r
\r
-\r
uint32_t ext4_inode_get_access_time(struct ext4_inode *inode)\r
{\r
return to_le32(inode->access_time);\r
}\r
-void ext4_inode_set_access_time(struct ext4_inode *inode, uint32_t time)\r
+void ext4_inode_set_access_time(struct ext4_inode *inode, uint32_t time)\r
{\r
inode->access_time = to_le32(time);\r
}\r
{\r
return to_le32(inode->change_inode_time);\r
}\r
-void ext4_inode_set_change_inode_time(struct ext4_inode *inode,\r
+void ext4_inode_set_change_inode_time(struct ext4_inode *inode,\r
uint32_t time)\r
{\r
inode->change_inode_time = to_le32(time);\r
return to_le32(inode->modification_time);\r
}\r
\r
-void ext4_inode_set_modification_time(struct ext4_inode *inode,\r
+void ext4_inode_set_modification_time(struct ext4_inode *inode,\r
uint32_t time)\r
{\r
inode->modification_time = to_le32(time);\r
return to_le32(inode->deletion_time);\r
}\r
\r
-void ext4_inode_set_deletion_time(struct ext4_inode *inode, uint32_t time)\r
+void ext4_inode_set_deletion_time(struct ext4_inode *inode, uint32_t time)\r
{\r
inode->deletion_time = to_le32(time);\r
}\r
{\r
return to_le32(inode->gid);\r
}\r
-void ext4_inode_set_gid(struct ext4_inode *inode, uint32_t gid)\r
+void ext4_inode_set_gid(struct ext4_inode *inode, uint32_t gid)\r
{\r
- inode->gid = to_le32(gid);\r
+ inode->gid = to_le32(gid);\r
}\r
\r
uint16_t ext4_inode_get_links_count(struct ext4_inode *inode)\r
{\r
return to_le16(inode->links_count);\r
}\r
-void ext4_inode_set_links_count(struct ext4_inode *inode, uint16_t cnt)\r
+void ext4_inode_set_links_count(struct ext4_inode *inode, uint16_t cnt)\r
{\r
inode->links_count = to_le16(cnt);\r
}\r
\r
-\r
uint64_t ext4_inode_get_blocks_count(struct ext4_sblock *sb,\r
struct ext4_inode *inode)\r
{\r
uint64_t count = to_le32(inode->blocks_count_lo);\r
\r
- if (ext4_sb_check_read_only(sb,\r
+ if (ext4_sb_has_feature_read_only(sb,\r
EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) {\r
\r
/* 48-bit field */\r
uint32_t block_bits =\r
ext4_inode_block_bits_count(ext4_sb_get_block_size(sb));\r
return count << (block_bits - 9);\r
- } else\r
- return count;\r
+ }\r
}\r
\r
return count;\r
}\r
\r
-\r
int ext4_inode_set_blocks_count(struct ext4_sblock *sb,\r
struct ext4_inode *inode, uint64_t count)\r
{\r
}\r
\r
/* Check if there can be used huge files (many blocks) */\r
- if (!ext4_sb_check_read_only(sb,\r
+ if (!ext4_sb_has_feature_read_only(sb,\r
EXT4_FEATURE_RO_COMPAT_HUGE_FILE))\r
return EINVAL;\r
\r
return EOK;\r
}\r
\r
-\r
uint32_t ext4_inode_get_flags(struct ext4_inode *inode)\r
{\r
return to_le32(inode->flags);\r
}\r
-void ext4_inode_set_flags(struct ext4_inode *inode, uint32_t flags)\r
+void ext4_inode_set_flags(struct ext4_inode *inode, uint32_t flags)\r
{\r
- inode->flags = to_le32(flags);\r
+ inode->flags = to_le32(flags);\r
}\r
\r
uint32_t ext4_inode_get_generation(struct ext4_inode *inode)\r
{\r
return to_le32(inode->generation);\r
}\r
-void ext4_inode_set_generation(struct ext4_inode *inode, uint32_t gen)\r
+void ext4_inode_set_generation(struct ext4_inode *inode, uint32_t gen)\r
{\r
inode->generation = to_le32(gen);\r
}\r
inode->osd2.linux2.file_acl_high = to_le16(acl >> 32);\r
}\r
\r
-\r
-\r
uint32_t ext4_inode_get_direct_block(struct ext4_inode *inode, uint32_t idx)\r
{\r
return to_le32(inode->blocks[idx]);\r
inode->blocks[idx] = to_le32(block);\r
}\r
\r
-\r
uint32_t ext4_inode_get_indirect_block(struct ext4_inode *inode, uint32_t idx)\r
{\r
return to_le32(inode->blocks[idx + EXT4_INODE_INDIRECT_BLOCK]);\r
EXT4_INODE_MODE_TYPE_MASK) == type;\r
}\r
\r
-bool ext4_inode_has_flag(struct ext4_inode *inode, uint32_t f)\r
+bool ext4_inode_has_flag(struct ext4_inode *inode, uint32_t f)\r
{\r
return ext4_inode_get_flags(inode) & f;\r
}\r
\r
-void ext4_inode_clear_flag(struct ext4_inode *inode, uint32_t f)\r
+void ext4_inode_clear_flag(struct ext4_inode *inode, uint32_t f)\r
{\r
uint32_t flags = ext4_inode_get_flags(inode);\r
flags = flags & (~f);\r
ext4_inode_set_flags(inode, flags);\r
}\r
\r
-void ext4_inode_set_flag(struct ext4_inode *inode, uint32_t f)\r
+void ext4_inode_set_flag(struct ext4_inode *inode, uint32_t f)\r
{\r
uint32_t flags = ext4_inode_get_flags(inode);\r
flags = flags | f;\r
ext4_inode_set_flags(inode, flags);\r
}\r
\r
-bool ext4_inode_can_truncate(struct ext4_sblock *sb,\r
+bool ext4_inode_can_truncate(struct ext4_sblock *sb,\r
struct ext4_inode *inode)\r
{\r
if ((ext4_inode_has_flag(inode, EXT4_INODE_FLAG_APPEND)) ||\r
return false;\r
}\r
\r
-\r
struct ext4_extent_header * ext4_inode_get_extent_header(\r
struct ext4_inode *inode)\r
{\r