return to_le32(de->inode);\r
}\r
\r
-void ext4_dir_entry_ll_set_inode(struct ext4_directory_entry_ll *de,\r
- uint32_t inode)\r
+void ext4_dir_entry_ll_set_inode(struct ext4_directory_entry_ll *de,\r
+ uint32_t inode)\r
{\r
de->inode = to_le32(inode);\r
}\r
return to_le16(de->entry_length);\r
}\r
\r
-void ext4_dir_entry_ll_set_entry_length(struct ext4_directory_entry_ll *de,\r
- uint16_t len)\r
+void ext4_dir_entry_ll_set_entry_length(struct ext4_directory_entry_ll *de,\r
+ uint16_t len)\r
{\r
de->entry_length = to_le16(len);\r
}\r
\r
\r
uint16_t ext4_dir_entry_ll_get_name_length(struct ext4_sblock *sb,\r
- struct ext4_directory_entry_ll *de)\r
+ struct ext4_directory_entry_ll *de)\r
{\r
uint16_t v = de->name_length;\r
\r
\r
return v;\r
}\r
-void ext4_dir_entry_ll_set_name_length(struct ext4_sblock *sb,\r
- struct ext4_directory_entry_ll *de, uint16_t len)\r
+void ext4_dir_entry_ll_set_name_length(struct ext4_sblock *sb,\r
+ struct ext4_directory_entry_ll *de, uint16_t len)\r
{\r
de->name_length = (len << 8) >> 8;\r
\r
\r
\r
uint8_t ext4_dir_entry_ll_get_inode_type(struct ext4_sblock *sb,\r
- struct ext4_directory_entry_ll *de)\r
+ struct ext4_directory_entry_ll *de)\r
{\r
if ((ext4_get32(sb, rev_level) > 0) ||\r
(ext4_get32(sb, minor_rev_level) >= 5))\r
}\r
\r
\r
-void ext4_dir_entry_ll_set_inode_type(struct ext4_sblock *sb,\r
- struct ext4_directory_entry_ll *de, uint8_t type)\r
+void ext4_dir_entry_ll_set_inode_type(struct ext4_sblock *sb,\r
+ struct ext4_directory_entry_ll *de, uint8_t type)\r
{\r
if ((ext4_get32(sb, rev_level) > 0) ||\r
(ext4_get32(sb, minor_rev_level) >= 5))\r
\r
\r
int ext4_dir_iterator_init(struct ext4_directory_iterator *it,\r
- struct ext4_inode_ref *inode_ref, uint64_t pos)\r
+ struct ext4_inode_ref *inode_ref, uint64_t pos)\r
{\r
it->inode_ref = inode_ref;\r
it->current = 0;\r
\r
if(!it->current)\r
break;\r
- /*Skip NULL referenced entry*/\r
+ /*Skip NULL referenced entry*/\r
if(it->current->inode != 0)\r
break;\r
}\r
}\r
\r
int ext4_dir_add_entry(struct ext4_inode_ref *parent, const char *name,\r
- uint32_t name_len, struct ext4_inode_ref *child)\r
+ uint32_t name_len, struct ext4_inode_ref *child)\r
{\r
struct ext4_fs *fs = parent->fs;\r
\r
memset(new_block.data, 0, block_size);\r
struct ext4_directory_entry_ll *block_entry = (void *)new_block.data;\r
ext4_dir_write_entry(&fs->sb, block_entry, block_size,\r
- child, name, name_len);\r
+ child, name, name_len);\r
\r
/* Save new block */\r
new_block.dirty = true;\r
}\r
\r
int ext4_dir_find_entry(struct ext4_directory_search_result *result,\r
- struct ext4_inode_ref *parent, const char *name, uint32_t name_len)\r
+ struct ext4_inode_ref *parent, const char *name, uint32_t name_len)\r
{\r
struct ext4_sblock *sb = &parent->fs->sb;\r
\r
uint16_t del_entry_length =\r
ext4_dir_entry_ll_get_entry_length(result.dentry);\r
ext4_dir_entry_ll_set_entry_length(tmp_dentry,\r
- tmp_dentry_length + del_entry_length);\r
+ tmp_dentry_length + del_entry_length);\r
}\r
\r
result.block.dirty = true;\r
struct ext4_directory_entry_ll *new_entry =\r
(void *) dentry + used_space;\r
ext4_dir_write_entry(sb, new_entry,\r
- free_space, child, name, name_len);\r
+ free_space, child, name, name_len);\r
\r
target_block->dirty = true;\r
-\r
return EOK;\r
}\r
}\r
\r
\r
int ext4_dir_find_in_block(struct ext4_block *block, struct ext4_sblock *sb,\r
- size_t name_len, const char *name,\r
- struct ext4_directory_entry_ll **res_entry)\r
+ size_t name_len, const char *name,\r
+ struct ext4_directory_entry_ll **res_entry)\r
{\r
/* Start from the first entry in block */\r
struct ext4_directory_entry_ll *dentry =\r
\r
/* Jump to next entry */\r
dentry = (struct ext4_directory_entry_ll *)\r
- ((uint8_t *) dentry + dentry_len);\r
+ ((uint8_t *) dentry + dentry_len);\r
}\r
\r
/* Entry not found */\r
#include <ext4_blockdev.h>\r
#include <ext4_super.h>\r
\r
-\r
#include <stdint.h>\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_dir_entry_ll_get_inode(struct ext4_directory_entry_ll *de);\r
\r
+/**@brief TODO: ...*/\r
void ext4_dir_entry_ll_set_inode(struct ext4_directory_entry_ll *de,\r
uint32_t inode);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint16_t ext4_dir_entry_ll_get_entry_length(struct ext4_directory_entry_ll *de);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_dir_entry_ll_set_entry_length(struct ext4_directory_entry_ll *de,\r
uint16_t len);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint16_t ext4_dir_entry_ll_get_name_length(struct ext4_sblock *sb,\r
struct ext4_directory_entry_ll *de);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_dir_entry_ll_set_name_length(struct ext4_sblock *sb,\r
struct ext4_directory_entry_ll *de, uint16_t len);\r
\r
-\r
-\r
+/**@brief TODO: ...*/\r
uint8_t ext4_dir_entry_ll_get_inode_type(struct ext4_sblock *sb,\r
struct ext4_directory_entry_ll *de);\r
-void ext4_dir_entry_ll_set_inode_type(struct ext4_sblock *sb,\r
- struct ext4_directory_entry_ll *de, uint8_t type);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_dir_entry_ll_set_inode_type(struct ext4_sblock *sb,\r
+ struct ext4_directory_entry_ll *de, uint8_t type);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_iterator_init(struct ext4_directory_iterator *it,\r
struct ext4_inode_ref *inode_ref, uint64_t pos);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_iterator_next(struct ext4_directory_iterator *it);\r
+\r
+/**@brief TODO: ...*/\r
int ext4_dir_iterator_fini(struct ext4_directory_iterator *it);\r
\r
+/**@brief TODO: ...*/\r
void ext4_dir_write_entry(struct ext4_sblock *sb,\r
struct ext4_directory_entry_ll *entry, uint16_t entry_len,\r
struct ext4_inode_ref *child, const char *name, size_t name_len);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_add_entry(struct ext4_inode_ref *parent, const char *name,\r
- uint32_t name_len, struct ext4_inode_ref *child);\r
+ uint32_t name_len, struct ext4_inode_ref *child);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_find_entry(struct ext4_directory_search_result *result,\r
- struct ext4_inode_ref *parent, const char *name, uint32_t name_len);\r
+ struct ext4_inode_ref *parent, const char *name, uint32_t name_len);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_remove_entry(struct ext4_inode_ref *parent, const char *name,\r
uint32_t name_len);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_try_insert_entry(struct ext4_sblock *sb,\r
struct ext4_block *target_block, struct ext4_inode_ref *child,\r
const char *name, uint32_t name_len);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_find_in_block(struct ext4_block *block, struct ext4_sblock *sb,\r
size_t name_len, const char *name,\r
struct ext4_directory_entry_ll **res_entry);\r
\r
+/**@brief TODO: ...*/\r
int ext4_dir_destroy_result(struct ext4_inode_ref *parent,\r
struct ext4_directory_search_result *result);\r
\r
-\r
#endif /* EXT4_DIR_H_ */\r
\r
/**\r
#ifndef CONFIG_HAVE_OWN_ERRNO
#include <errno.h>
#else
-#define EPERM 1 /* Operation not permitted */
-#define ENOENT 2 /* No such file or directory */
-#define ESRCH 3 /* No such process */
-#define EINTR 4 /* Interrupted system call */
-#define EIO 5 /* I/O error */
-#define ENXIO 6 /* No such device or address */
-#define E2BIG 7 /* Argument list too long */
-#define ENOEXEC 8 /* Exec format error */
-#define EBADF 9 /* Bad file number */
-#define ECHILD 10 /* No child processes */
-#define EAGAIN 11 /* Try again */
-#define ENOMEM 12 /* Out of memory */
-#define EACCES 13 /* Permission denied */
-#define EFAULT 14 /* Bad address */
-#define ENOTBLK 15 /* Block device required */
-#define EBUSY 16 /* Device or resource busy */
-#define EEXIST 17 /* File exists */
-#define EXDEV 18 /* Cross-device link */
-#define ENODEV 19 /* No such device */
-#define ENOTDIR 20 /* Not a directory */
-#define EISDIR 21 /* Is a directory */
-#define EINVAL 22 /* Invalid argument */
-#define ENFILE 23 /* File table overflow */
-#define EMFILE 24 /* Too many open files */
-#define ENOTTY 25 /* Not a typewriter */
-#define ETXTBSY 26 /* Text file busy */
-#define EFBIG 27 /* File too large */
-#define ENOSPC 28 /* No space left on device */
-#define ESPIPE 29 /* Illegal seek */
-#define EROFS 30 /* Read-only file system */
-#define EMLINK 31 /* Too many links */
-#define EPIPE 32 /* Broken pipe */
-#define EDOM 33 /* Math argument out of domain of func */
-#define ERANGE 34 /* Math result not representable */
-
-#define ENOTSUP 95
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* I/O error */
+#define ENXIO 6 /* No such device or address */
+#define E2BIG 7 /* Argument list too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file number */
+#define ECHILD 10 /* No child processes */
+#define EAGAIN 11 /* Try again */
+#define ENOMEM 12 /* Out of memory */
+#define EACCES 13 /* Permission denied */
+#define EFAULT 14 /* Bad address */
+#define ENOTBLK 15 /* Block device required */
+#define EBUSY 16 /* Device or resource busy */
+#define EEXIST 17 /* File exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* No such device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* File table overflow */
+#define EMFILE 24 /* Too many open files */
+#define ENOTTY 25 /* Not a typewriter */
+#define ETXTBSY 26 /* Text file busy */
+#define EFBIG 27 /* File too large */
+#define ENOSPC 28 /* No space left on device */
+#define ESPIPE 29 /* Illegal seek */
+#define EROFS 30 /* Read-only file system */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+#define EDOM 33 /* Math argument out of domain of func */
+#define ERANGE 34 /* Math result not representable */
+#define ENOTSUP 95 /* Not supported */
#endif
-/**@brief OK return value*/
#ifndef EOK
-#define EOK 0
+#define EOK 0
#endif
#endif /* EXT4_ERRNO_H_ */
/**
* @}
*/
-
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_COMPRESSION){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_COMPRESSION\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "COMPRESSION\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_FILETYPE){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_FILETYPE\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "FILETYPE\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_RECOVER){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_RECOVER\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "RECOVER\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_JOURNAL_DEV){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_JOURNAL_DEV\n");
+ ext4_dprintf(EXT4_DEBUG_FS,"JOURNAL_DEV\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_META_BG){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_META_BG\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "META_BG\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_EXTENTS){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_EXTENTS\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "EXTENTS\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_64BIT){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_64BIT\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "64BIT\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_MMP){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_MMP\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "MMP\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_FLEX_BG){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_FLEX_BG\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "FLEX_BG\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_EA_INODE){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_EA_INODE\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "EA_INODE\n");
}
if(features_incompatible &
EXT4_FEATURE_INCOMPAT_DIRDATA){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_INCOMPAT_DIRDATA\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "DIRDATA\n");
}
}
static void ext4_fs_debug_features_comp(uint32_t features_compatible)
{
if(features_compatible &
EXT4_FEATURE_COMPAT_DIR_PREALLOC){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_COMPAT_DIR_PREALLOC\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "DIR_PREALLOC\n");
}
if(features_compatible &
EXT4_FEATURE_COMPAT_IMAGIC_INODES){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_COMPAT_IMAGIC_INODES\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "IMAGIC_INODES\n");
}
if(features_compatible &
EXT4_FEATURE_COMPAT_HAS_JOURNAL){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_COMPAT_HAS_JOURNAL\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "HAS_JOURNAL\n");
}
if(features_compatible &
EXT4_FEATURE_COMPAT_EXT_ATTR){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_COMPAT_EXT_ATTR\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "EXT_ATTR\n");
}
if(features_compatible &
EXT4_FEATURE_COMPAT_RESIZE_INODE){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_COMPAT_RESIZE_INODE\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "RESIZE_INODE\n");
}
if(features_compatible &
EXT4_FEATURE_COMPAT_DIR_INDEX){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_COMPAT_DIR_INDEX\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "DIR_INDEX\n");
}
}
{
if(features_ro &
EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "SPARSE_SUPER\n");
}
if(features_ro &
EXT4_FEATURE_RO_COMPAT_LARGE_FILE){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_LARGE_FILE\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "LARGE_FILE\n");
}
if(features_ro &
EXT4_FEATURE_RO_COMPAT_BTREE_DIR){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_BTREE_DIR\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "BTREE_DIR\n");
}
if(features_ro &
EXT4_FEATURE_RO_COMPAT_HUGE_FILE){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_HUGE_FILE\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "HUGE_FILE\n");
}
if(features_ro &
EXT4_FEATURE_RO_COMPAT_GDT_CSUM){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_GDT_CSUM\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "GDT_CSUM\n");
}
if(features_ro &
EXT4_FEATURE_RO_COMPAT_DIR_NLINK){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_DIR_NLINK\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "DIR_NLINK\n");
}
if(features_ro &
EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE){
- ext4_dprintf(EXT4_DEBUG_FS,
- "EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE\n");
+ ext4_dprintf(EXT4_DEBUG_FS, "EXTRA_ISIZE\n");
}
}
*read_only = true;
return EOK;
}
-
*read_only = false;
return EOK;
#include <stdint.h>
#include <stdbool.h>
+/**@brief TODO: ...*/
int ext4_fs_init(struct ext4_fs *fs, struct ext4_blockdev *bdev);
+
+/**@brief TODO: ...*/
int ext4_fs_fini(struct ext4_fs *fs);
+/**@brief TODO: ...*/
int ext4_fs_check_features(struct ext4_fs *fs, bool *read_only);
-
+/**@brief TODO: ...*/
uint32_t ext4_fs_baddr2_index_in_group(struct ext4_sblock *s, uint32_t baddr);
+
+/**@brief TODO: ...*/
uint32_t ext4_fs_index_in_group2_baddr(struct ext4_sblock *s, uint32_t index,
uint32_t bgid);
-
+/**@brief TODO: ...*/
int ext4_fs_get_block_group_ref(struct ext4_fs *fs, uint32_t bgid,
struct ext4_block_group_ref *ref);
-int ext4_fs_put_block_group_ref(struct ext4_block_group_ref *ref);
+/**@brief TODO: ...*/
+int ext4_fs_put_block_group_ref(struct ext4_block_group_ref *ref);
+/**@brief TODO: ...*/
int ext4_fs_get_inode_ref(struct ext4_fs *fs, uint32_t index,
struct ext4_inode_ref *ref);
-int ext4_fs_put_inode_ref(struct ext4_inode_ref *ref);
+/**@brief TODO: ...*/
+int ext4_fs_put_inode_ref(struct ext4_inode_ref *ref);
+/**@brief TODO: ...*/
int ext4_fs_alloc_inode(struct ext4_fs *fs, struct ext4_inode_ref *inode_ref,
bool is_directory);
+
+/**@brief TODO: ...*/
int ext4_fs_free_inode(struct ext4_inode_ref *inode_ref);
+/**@brief TODO: ...*/
int ext4_fs_truncate_inode(struct ext4_inode_ref *inode_ref,
- uint64_t new_size);
+ uint64_t new_size);
+/**@brief TODO: ...*/
int ext4_fs_get_inode_data_block_index(struct ext4_inode_ref *inode_ref,
- uint64_t iblock, uint32_t *fblock);
+ uint64_t iblock, uint32_t *fblock);
+/**@brief TODO: ...*/
int ext4_fs_set_inode_data_block_index(struct ext4_inode_ref *inode_ref,
- uint64_t iblock, uint32_t fblock);
+ uint64_t iblock, uint32_t fblock);
+/**@brief TODO: ...*/
int ext4_fs_release_inode_block(struct ext4_inode_ref *inode_ref,
- uint32_t iblock);
+ uint32_t iblock);
+/**@brief TODO: ...*/
int ext4_fs_append_inode_block(struct ext4_inode_ref *inode_ref,
- uint32_t *fblock, uint32_t *iblock);
+ uint32_t *fblock, uint32_t *iblock);
#endif /* EXT4_FS_H_ */
\r
static void\r
ext2_prep_hashbuf(const char *src, int slen, uint32_t *dst, int dlen,\r
- int unsigned_char)\r
+ int unsigned_char)\r
{\r
uint32_t padding = slen | (slen << 8) | (slen << 16) | (slen << 24);\r
uint32_t buf_val;\r
\r
int\r
ext2_htree_hash(const char *name, int len,\r
- const uint32_t *hash_seed, int hash_version,\r
- uint32_t *hash_major, uint32_t *hash_minor)\r
+ const uint32_t *hash_seed, int hash_version,\r
+ uint32_t *hash_major, uint32_t *hash_minor)\r
{\r
uint32_t hash[4];\r
uint32_t data[8];\r
#include <ext4_config.h>\r
#include <ext4_types.h>\r
\r
-\r
+/**@brief TODO: ...*/\r
int ext4_ialloc_free_inode(struct ext4_fs *fs, uint32_t index, bool is_dir);\r
+\r
+/**@brief TODO: ...*/\r
int ext4_ialloc_alloc_inode(struct ext4_fs *fs, uint32_t *index, bool is_dir);\r
\r
#ifdef __cplusplus\r
#include <ext4_inode.h>\r
#include <ext4_super.h>\r
\r
+/**@brief TODO: ...*/\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
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
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
}\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
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
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
}\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
#include <ext4_config.h>\r
#include <stdint.h>\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_mode(struct ext4_sblock *sb, struct ext4_inode *inode);\r
+\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_mode(struct ext4_sblock *sb, struct ext4_inode *inode,\r
uint32_t mode);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_uid(struct ext4_inode *inode);\r
-void ext4_inode_set_uid(struct ext4_inode *inode, uint32_t uid);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_inode_set_uid(struct ext4_inode *inode, uint32_t uid);\r
\r
+/**@brief TODO: ...*/\r
uint64_t ext4_inode_get_size(struct ext4_sblock *sb, struct ext4_inode *inode);\r
-void ext4_inode_set_size(struct ext4_inode *inode, uint64_t size);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_inode_set_size(struct ext4_inode *inode, uint64_t size);\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_access_time(struct ext4_inode *inode);\r
-void ext4_inode_set_access_time(struct ext4_inode *inode, uint32_t time);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_inode_set_access_time(struct ext4_inode *inode, uint32_t time);\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_change_inode_time(struct ext4_inode *inode);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_change_inode_time(struct ext4_inode *inode,\r
uint32_t time);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_modification_time(struct ext4_inode *inode);\r
-void ext4_inode_set_modification_time(struct ext4_inode *inode, uint32_t time);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_inode_set_modification_time(struct ext4_inode *inode, uint32_t time);\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_deletion_time(struct ext4_inode *inode);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_deletion_time(struct ext4_inode *inode, uint32_t time);\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_gid(struct ext4_inode *inode);\r
-void ext4_inode_set_gid(struct ext4_inode *inode, uint32_t gid);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_inode_set_gid(struct ext4_inode *inode, uint32_t gid);\r
+\r
+/**@brief TODO: ...*/\r
uint16_t ext4_inode_get_links_count(struct ext4_inode *inode);\r
-void ext4_inode_set_links_count(struct ext4_inode *inode, uint16_t cnt);\r
\r
+/**@brief TODO: ...*/\r
+void ext4_inode_set_links_count(struct ext4_inode *inode, uint16_t cnt);\r
\r
+/**@brief TODO: ...*/\r
uint64_t ext4_inode_get_blocks_count(struct ext4_sblock *sb,\r
struct ext4_inode *inode);\r
+\r
+/**@brief TODO: ...*/\r
int ext4_inode_set_blocks_count(struct ext4_sblock *sb,\r
struct ext4_inode *inode, uint64_t cnt);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_flags(struct ext4_inode *inode);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_flags(struct ext4_inode *inode, uint32_t flags);\r
\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_generation(struct ext4_inode *inode);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_generation(struct ext4_inode *inode, uint32_t gen);\r
\r
+/**@brief TODO: ...*/\r
uint64_t ext4_inode_get_file_acl(struct ext4_inode *inode,\r
struct ext4_sblock *sb);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_file_acl(struct ext4_inode *inode,\r
struct ext4_sblock *sb, uint64_t acl);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_direct_block(struct ext4_inode *inode, uint32_t idx);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_direct_block(struct ext4_inode *inode, uint32_t idx,\r
uint32_t block);\r
\r
-\r
+/**@brief TODO: ...*/\r
uint32_t ext4_inode_get_indirect_block(struct ext4_inode *inode, uint32_t idx);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_indirect_block(struct ext4_inode *inode, uint32_t idx,\r
uint32_t block);\r
\r
+/**@brief TODO: ...*/\r
bool ext4_inode_is_type(struct ext4_sblock *sb, struct ext4_inode *inode,\r
uint32_t type);\r
\r
-\r
+/**@brief TODO: ...*/\r
bool ext4_inode_has_flag(struct ext4_inode *inode, uint32_t f);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_clear_flag(struct ext4_inode *inode, uint32_t f);\r
+\r
+/**@brief TODO: ...*/\r
void ext4_inode_set_flag(struct ext4_inode *inode, uint32_t f);\r
\r
+/**@brief TODO: ...*/\r
bool ext4_inode_can_truncate(struct ext4_sblock *sb, struct ext4_inode *inode);\r
\r
\r
/****************************Unstandard access to superblock*****************/
-/**@brief Blocks count get stored in superblock.
- * @param s superblock descriptor
- * @return count of blocks*/
-static inline uint64_t ext4_sb_get_blocks_cnt(struct ext4_sblock *s)
+/**@brief Blocks count get stored in superblock.
+ * @param s superblock descriptor
+ * @return count of blocks*/
+static inline uint64_t ext4_sb_get_blocks_cnt(struct ext4_sblock *s)
{
return ((uint64_t) to_le32(s->blocks_count_hi) << 32) |
to_le32(s->blocks_count_lo);
}
-/**@brief Free blocks count get stored in superblock.
- * @param s superblock descriptor
- * @return free blocks*/
-static inline uint64_t ext4_sb_get_free_blocks_cnt(struct ext4_sblock *s)
+/**@brief Free blocks count get stored in superblock.
+ * @param s superblock descriptor
+ * @return free blocks*/
+static inline uint64_t ext4_sb_get_free_blocks_cnt(struct ext4_sblock *s)
{
return ((uint64_t) to_le32(s->free_blocks_count_hi) << 32) |
to_le32(s->free_blocks_count_lo);
}
-/**@brief Free blocks count set.
- * @param s superblock descriptor
- * @param cnt new value of free blocks*/
-static inline void ext4_sb_set_free_blocks_cnt(struct ext4_sblock *s,
+/**@brief Free blocks count set.
+ * @param s superblock descriptor
+ * @param cnt new value of free blocks*/
+static inline void ext4_sb_set_free_blocks_cnt(struct ext4_sblock *s,
uint64_t cnt)
{
s->free_blocks_count_lo = to_le32((cnt << 32) >> 32);
s->free_blocks_count_hi = to_le32(cnt >> 32);
}
-/**@brief Block size get from superblock.
- * @param s superblock descriptor
- * @return block size in bytes*/
-static inline uint32_t ext4_sb_get_block_size(struct ext4_sblock *s)
+/**@brief Block size get from superblock.
+ * @param s superblock descriptor
+ * @return block size in bytes*/
+static inline uint32_t ext4_sb_get_block_size(struct ext4_sblock *s)
{
return 1024 << to_le32(s->log_block_size);
}
-/**@brief Block group descriptor size.
- * @param s superblock descriptor
- * @return block group descriptor size in bytes*/
+/**@brief Block group descriptor size.
+ * @param s superblock descriptor
+ * @return block group descriptor size in bytes*/
static inline uint16_t ext4_sb_get_desc_size(struct ext4_sblock *s)
{
uint16_t size = to_le16(s->desc_size);
/*************************Flags and features*********************************/
-/**@brief Support check of flag.
- * @param s superblock descriptor
- * @param v flag to check
- * @return true if flag is supported*/
+/**@brief Support check of flag.
+ * @param s superblock descriptor
+ * @param v flag to check
+ * @return true if flag is supported*/
static inline bool ext4_sb_check_flag(struct ext4_sblock *s, uint32_t v)
{
return to_le32(s->flags) & v;
}
-/**@brief Support check of feature compatible.
- * @param s superblock descriptor
- * @param v feature to check
- * @return true if feature is supported*/
+/**@brief Support check of feature compatible.
+ * @param s superblock descriptor
+ * @param v feature to check
+ * @return true if feature is supported*/
static inline bool ext4_sb_check_feature_compatible(struct ext4_sblock *s,
uint32_t v)
{
}
-/**@brief Support check of feature incompatible.
- * @param s superblock descriptor
- * @param v feature to check
- * @return true if feature is supported*/
+/**@brief Support check of feature incompatible.
+ * @param s superblock descriptor
+ * @param v feature to check
+ * @return true if feature is supported*/
static inline bool ext4_sb_check_feature_incompatible(struct ext4_sblock *s,
uint32_t v)
{
}
-/**@brief Support check of read only flag.
- * @param s superblock descriptor
- * @param v flag to check
- * @return true if flag is supported*/
+/**@brief Support check of read only flag.
+ * @param s superblock descriptor
+ * @param v flag to check
+ * @return true if flag is supported*/
static inline bool ext4_sb_check_read_only(struct ext4_sblock *s, uint32_t v)
{
return to_le32(s->features_read_only) & v;
/**************************More complex functions****************************/
-/**@brief Returns a block group count.
- * @param s superblock descriptor
- * @return count of block groups*/
+/**@brief Returns a block group count.
+ * @param s superblock descriptor
+ * @return count of block groups*/
uint32_t ext4_block_group_cnt(struct ext4_sblock *s);
-/**@brief Returns block count in block group
+/**@brief Returns block count in block group
* (last block group may have less blocks)
- * @param s superblock descriptor
- * @param bgid block group id
- * @return blocks count*/
+ * @param s superblock descriptor
+ * @param bgid block group id
+ * @return blocks count*/
uint32_t ext4_blocks_in_group_cnt(struct ext4_sblock *s, uint32_t bgid);
-/**@brief Returns inodes count in block group
+/**@brief Returns inodes count in block group
* (last block group may have less inodes)
- * @param s superblock descriptor
- * @param bgid block group id
- * @return inodes count*/
+ * @param s superblock descriptor
+ * @param bgid block group id
+ * @return inodes count*/
uint32_t ext4_inodes_in_group_cnt(struct ext4_sblock *s, uint32_t bgid);
/***************************Read/write/check superblock**********************/
-/**@brief Superblock write.
- * @param bdev block device descriptor.
- * @param s superblock descruptor
- * @return Standard error code */
+/**@brief Superblock write.
+ * @param bdev block device descriptor.
+ * @param s superblock descruptor
+ * @return Standard error code */
int ext4_sb_write(struct ext4_blockdev *bdev, struct ext4_sblock *s);
-/**@brief Superblock read.
- * @param bdev block device descriptor.
- * @param s superblock descruptor
- * @return Standard error code */
+/**@brief Superblock read.
+ * @param bdev block device descriptor.
+ * @param s superblock descruptor
+ * @return Standard error code */
int ext4_sb_read(struct ext4_blockdev *bdev, struct ext4_sblock *s);
-/**@brief Superblock simple validation.
- * @param s superblock dsecriptor
- * @return true if OK*/
+/**@brief Superblock simple validation.
+ * @param s superblock dsecriptor
+ * @return true if OK*/
bool ext4_sb_check(struct ext4_sblock *s);