diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-09-28 17:01:48 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-28 17:01:48 +0200 |
| commit | 2117a9b0f4b84f5bd6c99566bcf5849a64104467 (patch) | |
| tree | 590b20056c62d04a496aa22f6bee0034a1430e4e /dev/kernel/FSKit/Ext2.h | |
| parent | 0f88e96c0cf7ffaccecae94794024164c510f735 (diff) | |
| parent | b1302067703566624390d780dffd621bb99bb439 (diff) | |
Merge pull request #64 from nekernel-org/dev
ver: `kernel` v0.0.6
Diffstat (limited to 'dev/kernel/FSKit/Ext2.h')
| -rw-r--r-- | dev/kernel/FSKit/Ext2.h | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/dev/kernel/FSKit/Ext2.h b/dev/kernel/FSKit/Ext2.h index 35129dcd..be2e34a6 100644 --- a/dev/kernel/FSKit/Ext2.h +++ b/dev/kernel/FSKit/Ext2.h @@ -13,20 +13,20 @@ #include <hint/CompilerHint.h> /// @file Ext2.h -/// @brief EXT2 filesystem structures and constants. +/// @brief EXT2 filesystem structures, constants, and base wrappers. +/// EXT2 Constants #define kExt2FSMagic (0xEF53) #define kExt2FSMaxFileNameLen (255U) #define kExt2FSSuperblockOffset (1024) #define kExt2FSRootInodeNumber (2) - #define kExt2FSInodeSize (128U) #define kExt2FSBlockSizeBase (1024U) #define kExt2FSRev0 (0) #define kExt2FSRev1 (1) -/// @brief EXT2's file types. +/// EXT2 file types enum { kExt2FileTypeUnknown = 0, kExt2FileTypeRegular = 1, @@ -38,7 +38,17 @@ enum { kExt2FileTypeSymbolicLink = 7 }; -/// @brief The super block structure, located at LBA 1024. +typedef struct EXT2_GROUP_DESCRIPTOR final { + UInt32 fBlockBitmap; + UInt32 fInodeBitmap; + UInt32 fInodeTable; + UInt16 fFreeBlocksCount; + UInt16 fFreeInodesCount; + UInt16 fBgUsedDirsCount; + UInt16 fBgPad; + UInt32 fBgReserved[3]; +} EXT2_GROUP_DESCRIPTOR; + struct PACKED EXT2_SUPER_BLOCK final { Kernel::UInt32 fInodeCount; Kernel::UInt32 fBlockCount; @@ -55,7 +65,7 @@ struct PACKED EXT2_SUPER_BLOCK final { Kernel::UInt32 fWriteTime; Kernel::UInt16 fMountCount; Kernel::UInt16 fMaxMountCount; - Kernel::UInt16 fMagic; // should be 0xEF53 + Kernel::UInt16 fMagic; Kernel::UInt16 fState; Kernel::UInt16 fErrors; Kernel::UInt16 fMinorRevision; @@ -78,7 +88,6 @@ struct PACKED EXT2_SUPER_BLOCK final { Kernel::Char fLastMounted[64]; Kernel::UInt32 fAlgoBitmap; - // Optional journal fields and padding Kernel::UInt8 fPreallocBlocks; Kernel::UInt8 fPreallocDirBlocks; Kernel::UInt16 fReservedGDTBlocks; @@ -112,22 +121,28 @@ struct PACKED EXT2_INODE final { Kernel::UInt32 fFlags; Kernel::UInt32 fOSD1; - Kernel::UInt32 - fBlock[15]; // 0-11: direct, 12: indirect, 13: double indirect, 14: triple indirect + Kernel::UInt32 fBlock[15]; // direct 0-11, indirect 12, double 13, triple 14 Kernel::UInt32 fGeneration; Kernel::UInt32 fFileACL; - Kernel::UInt32 fDirACL; // Only for revision 1+ + Kernel::UInt32 fDirACL; Kernel::UInt32 fFragmentAddr; Kernel::UInt8 fOSD2[12]; }; +/// Directory entry struct PACKED EXT2_DIR_ENTRY final { Kernel::UInt32 fInode; Kernel::UInt16 fRecordLength; Kernel::UInt8 fNameLength; Kernel::UInt8 fFileType; - Kernel::Char - fName[kExt2FSMaxFileNameLen]; // null-terminated, not fixed-length in actual on-disk layout -};
\ No newline at end of file + Kernel::Char fName[kExt2FSMaxFileNameLen]; +}; + +/// VFS usage +struct Ext2Node { + Kernel::UInt32 inodeNumber; + EXT2_INODE inode; + Kernel::UInt32 cursor{0}; +}; |
