Ext2
| Member Type | Member Name |
|---|---|
uint32_t | inodes_count |
uint32_t | blocks_count |
uint32_t | r_blocks_count |
uint32_t | free_blocks_count |
uint32_t | free_inodes_count |
uint32_t | first_data_block |
uint32_t | log_block_size |
uint32_t | log_frag_size |
uint32_t | blocks_per_group |
uint32_t | frags_per_group |
uint32_t | inodes_per_group |
uint32_t | mtime |
uint32_t | wtime |
uint16_t | mnt_count |
uint16_t | max_mnt_count |
uint16_t | magic |
uint16_t | state |
uint16_t | errors |
uint16_t | minor_rev_level |
uint32_t | lastcheck |
uint32_t | checkinterval |
uint32_t | creator_os |
uint32_t | rev_level |
uint16_t | def_resuid |
uint16_t | def_resgid |
uint32_t | first_ino |
uint16_t | inode_size |
uint16_t | block_group_nr |
uint32_t | feature_compat |
uint32_t | feature_incompat |
uint32_t | feature_ro_compat |
uint8_t | uuid[16] |
char | volume_name[16] |
char | last_mounted[64] |
uint32_t | algorithm_usage_bitmap |
uint8_t | prealloc_blocks |
uint8_t | prealloc_dir_blocks |
uint16_t | padding |
union { struct { uint32_t journal_uuid[4]; uint32_t journal_inum; uint32_t journal_dev; uint32_t last_orphan; uint32_t hash_seed[4]; uint8_t def_hash_version; uint8_t journal_backup_type; uint16_t desc_size; uint32_t default_mount_opts; uint32_t first_meta_bg; uint32_t mkfs_time; uint32_t journal_blocks[17]; uint32_t quota_group_inode; // [4] → offset 0x258 uint32_t quota_project_inode; // [5] → offset 0x25C }; uint32_t reserved[204]; } | None |
| Member Type | Member Name |
|---|---|
uint32_t | block_bitmap |
uint32_t | inode_bitmap |
uint32_t | inode_table |
uint16_t | free_blocks_count |
uint16_t | free_inodes_count |
uint16_t | used_dirs_count |
uint16_t | pad |
uint32_t | reserved[3] |
| Member Type | Member Name |
|---|---|
uint16_t | mode |
uint16_t | uid |
uint32_t | size |
uint32_t | atime |
uint32_t | ctime |
uint32_t | mtime |
uint32_t | dtime |
uint16_t | gid |
uint16_t | links_count |
uint32_t | blocks |
uint32_t | flags |
uint32_t | osd1 |
uint32_t | block[EXT2_NBLOCKS] |
uint32_t | generation |
uint32_t | file_acl |
uint32_t | dir_acl |
uint32_t | faddr |
uint8_t | frag[16] |
uint8_t | osd2[12] |
| Member Type | Member Name |
|---|---|
struct ext2_inode | node |
uint32_t | inode_num |
struct bcache_entry | *ent |
| Member Type | Member Name |
|---|---|
uint32_t | inode |
uint16_t | rec_len |
uint8_t | name_len |
uint8_t | file_type |
char | name[EXT2_NAME_LEN + 1] |
| Member Type | Member Name |
|---|---|
struct generic_partition | *partition |
struct generic_disk | *drive |
struct ext2_sblock | *sblock |
struct ext2_group_desc | *group_desc |
struct bcache_entry | *sbcache_ent |
struct bcache_entry | *gdesc_cache_ent |
uint32_t | num_groups |
uint32_t | inodes_count |
uint32_t | inodes_per_group |
uint32_t | blocks_per_group |
uint32_t | block_size |
uint32_t | sectors_per_block |
uint16_t | inode_size |
struct spinlock | lock |
type alias
Section titled “type alias”(*dir_entry_callback) : bool (struct ext2_fs *fs, struct ext2_dir_entry *entry, void *ctx, uint32_t block_num, uint32_t entry_num, uint32_t entry_offset)
type alias
Section titled “type alias”(*ext2_block_visitor) : void (struct ext2_fs *fs, struct ext2_inode *inode, uint32_t depth, uint32_t *block_ptr, void *user_data)
uint8_t *ext2_block_read(struct ext2_fs*fs,uint32_t block_num,struct bcache_entry**out)boolext2_block_write(struct ext2_fs*fs,struct bcache_entry*ent,enum bio_request_priorityprio)boolext2_read_superblock(struct generic_partition*,struct ext2_sblock*sblock)boolext2_write_superblock(struct ext2_fs*fs)boolext2_write_group_desc(struct ext2_fs*fs)enum errnoext2_mount(struct generic_partition*,struct ext2_fs*fs,struct ext2_sblock*sblock,struct vfs_node*out_node)struct vfs_node *ext2_g_mount(struct generic_partition*)struct ext2_inode *ext2_inode_read(struct ext2_fs*fs,uint32_t inode_idx,struct bcache_entry**out_ent)boolext2_inode_write(struct ext2_fs*fs,uint32_t inode_num,struct ext2_inode*inode)uint32_text2_get_or_set_block(struct ext2_fs*fs,struct ext2_inode*inode,uint32_t block_index,uint32_t new_block_num,bool allocate,bool *was_allocated)uint32_text2_block_to_lba(struct ext2_fs*fs,uint32_t block_num)boolext2_dirent_valid(struct ext2_dir_entry*entry)voidext2_init_inode(struct ext2_inode*new_inode,uint16_t mode)voidext2_init_dirent(struct ext2_fs*fs,struct ext2_dir_entry*new_entry,uint32_t inode_num,char *name,uint8_t type)uint8_text2_extract_ftype(uint16_t mode)boolext2_walk_dir(struct ext2_fs*fs,struct ext2_full_inode*dir,dir_entry_callback cb,void *ctx)static inline voidext2_dealloc_inode(struct ext2_full_inode*ino)static inline uint32_text2_get_block_group(struct ext2_fs*fs,uint32_t block)static inline uint32_text2_get_inode_group(struct ext2_fs*fs,uint32_t inode)static inline boolext2_fs_lock(struct ext2_fs*fs)static inline voidext2_fs_unlock(struct ext2_fs*fs,bool b)static inline voidext2_prefetch_block(struct ext2_fs*fs,uint32_t block)static inline voidext2_inode_lock(struct ext2_full_inode*ino)static inline voidext2_inode_unlock(struct ext2_full_inode*ino)static inline uint8_t *ext2_create_bcache_ent(struct ext2_fs*fs,uint32_t block,struct bcache_entry**out)enum errnoext2_link_file(struct ext2_fs*fs,struct ext2_full_inode*dir_inode,struct ext2_full_inode*inode,char *name,uint8_t type,bool increment_links)enum errnoext2_unlink_file(struct ext2_fs*fs,struct ext2_full_inode*dir_inode,char *name,bool free_blocks,bool decrement_links)enum errnoext2_create_file(struct ext2_fs*fs,struct ext2_full_inode*parent_dir,char *name,uint16_t mode,bool increment_links)enum errnoext2_symlink_file(struct ext2_fs*fs,struct ext2_full_inode*dir_inode,char *name,char *target)enum errnoext2_write_file(struct ext2_fs*fs,struct ext2_full_inode*inode,uint32_t offset,uint8_t *src,uint32_t size)enum errnoext2_read_file(struct ext2_fs*fs,struct ext2_full_inode*inode,uint32_t offset,uint8_t *buffer,uint64_t length)enum errnoext2_truncate_file(struct ext2_fs*fs,struct ext2_full_inode*inode,uint32_t new_size)enum errnoext2_chmod(struct ext2_fs*fs,struct ext2_full_inode*node,uint16_t new_mode)enum errnoext2_chown(struct ext2_fs*fs,struct ext2_full_inode*node,uint32_t new_uid,uint32_t new_gid)enum errnoext2_readlink(struct ext2_fs*fs,struct ext2_full_inode*node,char *buf,uint64_t size)struct ext2_full_inode *ext2_find_file_in_dir(struct ext2_fs*fs,struct ext2_full_inode*dir_inode,char *fname,uint8_t *type_out)boolext2_dir_contains_file(struct ext2_fs*fs,struct ext2_full_inode*dir_inode,char *fname)enum errnoext2_mkdir(struct ext2_fs*fs,struct ext2_full_inode*parent_dir,char *name,uint16_t mode)enum errnoext2_rmdir(struct ext2_fs*fs,struct ext2_full_inode*parent_dir,char *name)enum errnoext2_readdir(struct ext2_fs*fs,struct ext2_full_inode*dir_inode,struct ext2_dir_entry*out,uint32_t entry_offset)uint32_text2_alloc_block(struct ext2_fs*fs)boolext2_free_block(struct ext2_fs*fs,uint32_t block_num)uint32_text2_alloc_inode(struct ext2_fs*fs)boolext2_free_inode(struct ext2_fs*fs,uint32_t inode_num)boolext2_find_first_available(struct ext2_fs*fs,struct ext2_full_inode*dir,uint32_t *new_block)voidext2_traverse_inode_blocks(struct ext2_fs*fs,struct ext2_inode*inode,ext2_block_visitor visitor,void *user_data,bool readahead)voidext2_g_print(struct generic_partition*)voidext2_dump_file_data(struct ext2_fs*fs,struct ext2_inode*inode,uint32_t start_block_index,uint32_t length)
Defines
Section titled “Defines”EXT2_PRIO_DIRENT:BIO_RQ_MEDIUMEXT2_PRIO_INODE:BIO_RQ_MEDIUMEXT2_PRIO_DATA:BIO_RQ_HIGHEXT2_PRIO_BITMAPS:BIO_RQ_BACKGROUNDEXT2_PRIO_SBLOCK:BIO_RQ_LOWEXT2_NBLOCKS:15EXT2_SUPERBLOCK_OFFSET:1024EXT2_SIGNATURE_OFFSET:0x38EXT2_SIGNATURE:0xEF53EXT2_NAME_LEN:255EXT2_ROOT_INODE:2EXT2_S_IFSOCK:0xC000 // socketEXT2_S_IFLNK:0xA000 // symbolic linkEXT2_S_IFREG:0x8000 // regular fileEXT2_S_IFBLK:0x6000 // block deviceEXT2_S_IFDIR:0x4000 // directoryEXT2_S_IFCHR:0x2000 // character deviceEXT2_S_IFIFO:0x1000 // FIFOEXT2_S_IFMT:0xF000 // mask to extract file type from i_modeEXT2_S_PERMS:0x0FFF // lower 12 bits: special + rwx bitsEXT2_S_IRWXU:0x01C0 // owner permissions - ALLEXT2_S_IRWXG:0x0038 // group permissions - ALLEXT2_S_IRWXO:0x0007 // others permissions - ALLEXT2_S_PERMS_ONLY:0x01FF // rwx bits onlyEXT2_S_IRUSR:0x0100 // Owner can readEXT2_S_IWUSR:0x0080 // Owner can writeEXT2_S_IXUSR:0x0040 // Owner can executeEXT2_S_IRGRP:0x0020 // Group can readEXT2_S_IWGRP:0x0010 // Group can writeEXT2_S_IXGRP:0x0008 // Group can executeEXT2_S_IROTH:0x0004 // Others can readEXT2_S_IWOTH:0x0002 // Others can writeEXT2_S_IXOTH:0x0001 // Others can executeEXT2_FT_UNKNOWN:0 // Unknown file typeEXT2_FT_REG_FILE:1 // Regular fileEXT2_FT_DIR:2 // DirectoryEXT2_FT_CHRDEV:3 // Character deviceEXT2_FT_BLKDEV:4 // Block deviceEXT2_FT_FIFO:5 // FIFO (named pipe)EXT2_FT_SOCK:6 // Unix domain socketEXT2_FT_SYMLINK:7 // Symbolic linkEXT2_FT_MAX:8 // Number of defined file typesEXT2_SECRM_FL:0x00000001 // Secure deletionEXT2_UNRM_FL:0x00000002 // UndeleteEXT2_COMPR_FL:0x00000004 // Compress fileEXT2_SYNC_FL:0x00000008 // Synchronous updatesEXT2_IMMUTABLE_FL:0x00000010 // Immutable fileEXT2_APPEND_FL:0x00000020 // Writes only appendEXT2_NODUMP_FL:0x00000040 // Don't include in backupsEXT2_NOATIME_FL:0x00000080 // Don't update access timeEXT2_DIRTY_FL:0x00000100 // Dirty (compress support)EXT2_COMPRBLK_FL:0x00000200 // One or more compressed clustersEXT2_NOCOMPR_FL:0x00000400 // Don't compressEXT2_ECOMPR_FL:0x00000800 // Compression errorEXT2_IMAGIC_FL:0x00002000 // AFS directoryEXT2_JOURNAL_DATA_FL:0x00004000 // Write data to journal (data=journal)EXT2_NOTAIL_FL:0x00008000 // File tail not merged (reiserfs)EXT2_DIRSYNC_FL:0x00010000 // Directory sync updatesEXT2_TOPDIR_FL:0x00020000 // Top of directory hierarchyEXT2_HUGE_FILE_FL:0x00040000 // Set to each huge fileEXT2_EXTENTS_FL:0x00080000 // Inode uses extentsEXT2_EA_INODE_FL:0x00200000 // Inode stores extended attributesEXT2_INLINE_DATA_FL:0x10000000 // Data is stored inline in inodeEXT2_PROJINHERIT_FL:0x20000000 // Project ID inheritanceEXT2_RESERVED_FL:0x80000000 // Reserved for ext3/4EXT2_FL_USER_VISIBLE:0x000BDFFF // User-visible flagsEXT2_FL_USER_MODIFIABLE:(EXT2_FL_USER_VISIBLE & ~(EXT2_SECRM_FL | EXT2_UNRM_FL))MAKE_NOP_CALLBACK:
static bool nop_callback(struct ext2_fs *fs, struct ext2_dir_entry *entry, void *ctx_ptr, uint32_t block_num, uint32_t entry_num, uint32_t entry_offset) { (void) fs; (void) entry_offset; (void) entry; (void) ctx_ptr; (void) block_num; (void) entry_num; return false; }