/* vi: set ts=4:
 *
 * mke2fs.h - Headers for ext2
 *
 * Copyright 2006 Rob Landley <rob@landley.net>
 */

// Stuff defined in linux/ext2_fs.h

#define EXT2_SUPER_MAGIC  0xEF53

struct ext2_inode {
	uint16_t mode;        // File mode
	uint16_t uid;         // Low 16 bits of Owner Uid
	uint32_t size;        // Size in bytes
	uint32_t atime;       // Access time
	uint32_t ctime;       // Creation time
	uint32_t mtime;       // Modification time
	uint32_t dtime;       // Deletion Time
	uint16_t gid;         // Low 16 bits of Group Id
	uint16_t links_count; // Links count
	uint32_t blocks;      // Blocks count
	uint32_t flags;       // File flags
	uint32_t reserved1;
	uint32_t block[15];   // Pointers to blocks
	uint32_t generation;  // File version (for NFS)
	uint32_t file_acl;    // File ACL
	uint32_t dir_acl;     // Directory ACL
	uint32_t faddr;       // Fragment address
	uint8_t  frag;        // Fragment number
	uint8_t  fsize;       // Fragment size
	uint16_t pad1;
	uint16_t uid_high;    // High bits of uid
	uint16_t gid_high;    // High bits of gid
	uint32_t reserved2;
};

struct ext2_super_block {
	uint32_t inodes_count;      // Inodes count
	uint32_t blocks_count;      // Blocks count
	uint32_t r_blocks_count;    // Reserved blocks count
	uint32_t free_blocks_count; // Free blocks count
	uint32_t free_inodes_count; // Free inodes count
	uint32_t first_data_block;  // First Data Block
	uint32_t log_block_size;    // Block size
	uint32_t log_frag_size;     // Fragment size
	uint32_t blocks_per_group;  // # Blocks per group
	uint32_t frags_per_group;   // # Fragments per group
	uint32_t inodes_per_group;  // # Inodes per group
	uint32_t mtime;             // Mount time
	uint32_t wtime;             // Write time
	uint16_t mnt_count;         // Mount count
	uint16_t max_mnt_count;     // Maximal mount count
	uint16_t magic;             // Magic signature
	uint16_t state;             // File system state
	uint16_t errors;            // Behaviour when detecting errors
	uint16_t minor_rev_level;   // minor revision level
	uint32_t lastcheck;         // time of last check
	uint32_t checkinterval;     // max. time between checks
	uint32_t creator_os;        // OS
	uint32_t rev_level;         // Revision level
	uint16_t def_resuid;        // Default uid for reserved blocks
	uint16_t def_resgid;        // Default gid for reserved blocks
	uint32_t first_ino;         // First non-reserved inode
	uint16_t inode_size;        // size of inode structure
	uint16_t block_group_nr;    // block group # of this superblock
	uint32_t feature_compat;    // compatible feature set
	uint32_t feature_incompat;  // incompatible feature set
	uint32_t feature_ro_compat; // readonly-compatible feature set
	char     uuid[16];          // 128-bit uuid for volume
	char     volume_name[16];   // volume name
	char     last_mounted[64];  // directory where last mounted
	uint32_t alg_usage_bitmap;  // For compression
	// For EXT2_COMPAT_PREALLOC
	uint8_t  prealloc_blocks;   // Nr of blocks to try to preallocate
	uint8_t  prealloc_dir_blocks; //Nr to preallocate for dirs
	uint16_t padding1;
	// For EXT3_FEATURE_COMPAT_HAS_JOURNAL
	uint8_t  journal_uuid[16];   // uuid of journal superblock
	uint32_t journal_inum;       // inode number of journal file
	uint32_t journal_dev;        // device number of journal file
	uint32_t last_orphan;        // start of list of inodes to delete
	uint32_t hash_seed[4];       // HTREE hash seed
	uint8_t  def_hash_version;   // Default hash version to use
	uint8_t  padding2[3];
	uint32_t default_mount_opts;
 	uint32_t first_meta_bg;      // First metablock block group
	uint32_t mkfs_time;          // Creation timestamp
	uint32_t jnl_blocks[17];     // Backup of journal inode
	uint32_t reserved[172];      // Padding to the end of the block
};

#define EXT2_FEATURE_COMPAT_DIR_PREALLOC	0x0001
#define EXT2_FEATURE_COMPAT_IMAGIC_INODES	0x0002
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL		0x0004
#define EXT2_FEATURE_COMPAT_EXT_ATTR		0x0008
#define EXT2_FEATURE_COMPAT_RESIZE_INO		0x0010
#define EXT2_FEATURE_COMPAT_DIR_INDEX		0x0020

#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001
#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE	0x0002
#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR	0x0004

#define EXT2_FEATURE_INCOMPAT_COMPRESSION	0x0001
#define EXT2_FEATURE_INCOMPAT_FILETYPE		0x0002
#define EXT3_FEATURE_INCOMPAT_RECOVER		0x0004
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV	0x0008
#define EXT2_FEATURE_INCOMPAT_META_BG		0x0010

#define EXT2_NAME_LEN 255

struct ext2_dentry {
	uint32_t inode;         // Inode number
    uint16_t rec_len;       // Directory entry length
    uint8_t  name_len;      // Name length
    uint8_t  file_type;
	char     name[255];     // File name
};

// Ext2 directory file types.  Only the low 3 bits are used.  The
// other bits are reserved for now.

enum {
	EXT2_FT_UNKNOWN,
	EXT2_FT_REG_FILE,
	EXT2_FT_DIR,
	EXT2_FT_CHRDEV,
	EXT2_FT_BLKDEV,
	EXT2_FT_FIFO,
	EXT2_FT_SOCK,
	EXT2_FT_SYMLINK,
	EXT2_FT_MAX
};
