From a69dc6b982be67156ba4273b37a87c9e03a54b2c Mon Sep 17 00:00:00 2001 From: Amlal Date: Mon, 24 Feb 2025 20:49:30 +0100 Subject: IMPL: NeFS doesn't store full path now in catalog name. IMPL: HPFS defining data structures. META: Ran format command for project. Signed-off-by: Amlal --- dev/Kernel/FSKit/HPFS.h | 19 ++++++++++++++-- dev/Kernel/FSKit/IndexableProperty.h | 6 ++--- dev/Kernel/FSKit/NeFS.h | 16 ++++++++------ dev/Kernel/HALKit/AMD64/HalDebugOutput.cc | 2 +- dev/Kernel/HALKit/ARM64/Storage/MFlash+IO.cc | 15 +++++++------ dev/Kernel/NetworkKit/MAC.h | 2 +- dev/Kernel/src/FS/NeFS.cc | 33 ++++++++++++++++++++++++---- 7 files changed, 68 insertions(+), 25 deletions(-) (limited to 'dev/Kernel') diff --git a/dev/Kernel/FSKit/HPFS.h b/dev/Kernel/FSKit/HPFS.h index 9e2a3e36..ef1b4ad0 100644 --- a/dev/Kernel/FSKit/HPFS.h +++ b/dev/Kernel/FSKit/HPFS.h @@ -11,9 +11,12 @@ /// @file HPFS.h /// @brief HPFS filesystem support. -#define kHPFSVersion 0x0100 +#define kHPFSVersion (0x0100) #define kHPFSMagic " HPFS" -#define kHPFSMagicLen 8 +#define kHPFSMagicLen (8) + +#define kHPFSFileNameLen (255) +#define kHPFSPartNameLen (255) #define kHPFSMinimumDiskSize (gib_cast(64)) @@ -32,6 +35,7 @@ struct HPFS_BOOT_NODE; struct HPFS_BOOT_NODE final { NeOS::Char fMagic[kHPFSMagicLen]; + NeOS::Char fPartName[kHPFSPartNameLen]; NeOS::UInt32 fVersion; NeOS::UInt64 fBadSectors; NeOS::UInt64 fSectorCount; @@ -41,4 +45,15 @@ struct HPFS_BOOT_NODE final NeOS::UInt8 fTextEncoding; NeOS::UInt64 fRootINode; NeOS::UInt64 fRecoveryINode; +}; + +struct HPFS_INDEX_NODE +{ + NeOS::Char fName[kHPFSFileNameLen]; + NeOS::UInt32 fFlags; + NeOS::UInt16 fKind; + NeOS::UInt32 fSize; + NeOS::Lba fFirstINode; + NeOS::Lba fLastINode; + NeOS::UInt32 fChecksum; }; \ No newline at end of file diff --git a/dev/Kernel/FSKit/IndexableProperty.h b/dev/Kernel/FSKit/IndexableProperty.h index a942cc7c..091f4c9b 100644 --- a/dev/Kernel/FSKit/IndexableProperty.h +++ b/dev/Kernel/FSKit/IndexableProperty.h @@ -10,8 +10,8 @@ #include #include -#define kIndexerNodeNameLength 255 -#define kIndexerClaimed 0xCF +#define kIndexerCatalogNameLength 255 +#define kIndexerClaimed 0xCF namespace NeOS { @@ -21,7 +21,7 @@ namespace NeOS { public: Char Drive[kDriveNameLen]; - Char Path[kIndexerNodeNameLength]; + Char Path[kIndexerCatalogNameLength]; }; class IndexableProperty final : public Property diff --git a/dev/Kernel/FSKit/NeFS.h b/dev/Kernel/FSKit/NeFS.h index 19123a4c..0383c234 100644 --- a/dev/Kernel/FSKit/NeFS.h +++ b/dev/Kernel/FSKit/NeFS.h @@ -29,7 +29,7 @@ default. #define kNeFSInvalidFork (-1) #define kNeFSInvalidCatalog (-1) -#define kNeFSNodeNameLen (256) +#define kNeFSCatalogNameLen (256) #define kNeFSMinimumDiskSize (gib_cast(4)) @@ -142,8 +142,8 @@ struct PACKED NEFS_CATALOG_STRUCT final { BOOL ForkOrCatalog : 1 {0}; - NeOS::Char Name[kNeFSNodeNameLen] = {0}; - NeOS::Char Mime[kNeFSMimeNameLen] = {0}; + NeOS::Char Name[kNeFSCatalogNameLen] = {0}; + NeOS::Char Mime[kNeFSMimeNameLen] = {0}; /// Catalog flags. NeOS::UInt16 Flags; @@ -167,13 +167,15 @@ struct PACKED NEFS_CATALOG_STRUCT final NeOS::Lba DataFork; NeOS::Lba ResourceFork; - /// Tree allocation tracker. + /// Buddy allocation tracker. NeOS::Lba NextSibling; NeOS::Lba PrevSibling; /// Best-buddy tracker. NeOS::Lba NextBestSibling; NeOS::Lba NextPrevSibling; + + NeOS::UInt32 Checksum; }; /// @brief Fork type, contains a data page. @@ -184,8 +186,8 @@ struct PACKED NEFS_FORK_STRUCT final { BOOL ForkOrCatalog : 1 {1}; - NeOS::Char ForkName[kNeFSForkNameLen] = {0}; - NeOS::Char CatalogName[kNeFSNodeNameLen] = {0}; + NeOS::Char ForkName[kNeFSForkNameLen] = {0}; + NeOS::Char CatalogName[kNeFSCatalogNameLen] = {0}; NeOS::Int32 Flags; NeOS::Int32 Kind; @@ -433,7 +435,7 @@ namespace NeOS } private: - Char mStamp[kNeFSNodeNameLen] = {"/etc/xml/journal" kNeFSJournalExt}; + Char mStamp[kNeFSCatalogNameLen] = {"/etc/xml/journal" kNeFSJournalExt}; }; namespace NeFS diff --git a/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc b/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc index ba4e4a7c..d5a1f327 100644 --- a/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc +++ b/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc @@ -84,7 +84,7 @@ namespace NeOS static int x = kFontSizeX, y = kFontSizeY; - static BOOL not_important = NO; + static BOOL not_important = YES; while (index < len) { diff --git a/dev/Kernel/HALKit/ARM64/Storage/MFlash+IO.cc b/dev/Kernel/HALKit/ARM64/Storage/MFlash+IO.cc index 99200349..c9df9b20 100644 --- a/dev/Kernel/HALKit/ARM64/Storage/MFlash+IO.cc +++ b/dev/Kernel/HALKit/ARM64/Storage/MFlash+IO.cc @@ -92,13 +92,14 @@ namespace NeOS if (packet_frame[8] != (UInt64)kFlashBridgeRevision) return; - packet_frame[16+0] = lba; - packet_frame[16+4] = sector_sz; - packet_frame[16+8] = lba; - packet_frame[16+12] = buf_sz; - packet_frame[16+14] = (UIntPtr)HAL::hal_get_phys_address(buf); - - while (packet_frame[0] == lba); + packet_frame[16 + 0] = lba; + packet_frame[16 + 4] = sector_sz; + packet_frame[16 + 8] = lba; + packet_frame[16 + 12] = buf_sz; + packet_frame[16 + 14] = (UIntPtr)HAL::hal_get_phys_address(buf); + + while (packet_frame[0] == lba) + ; } Void drv_std_read(Int32 slot, UInt64 lba, Char* buf, SizeT sector_sz, SizeT buf_sz) diff --git a/dev/Kernel/NetworkKit/MAC.h b/dev/Kernel/NetworkKit/MAC.h index 4ea05b70..c7fc25b1 100644 --- a/dev/Kernel/NetworkKit/MAC.h +++ b/dev/Kernel/NetworkKit/MAC.h @@ -24,7 +24,7 @@ namespace NeOS explicit MacAddressGetter() = default; public: - KString& AsString(); + KString& AsString(); Array& AsBytes(); }; diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 0666149a..29427a2a 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -264,7 +264,7 @@ _Output NEFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char return nullptr; } - Char parent_name[kNeFSNodeNameLen] = {0}; + Char parent_name[kNeFSCatalogNameLen] = {0}; for (SizeT indexName = 0UL; indexName < rt_string_len(name); ++indexName) { @@ -331,6 +331,7 @@ _Output NEFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char NEFS_CATALOG_STRUCT* child_catalog = new NEFS_CATALOG_STRUCT(); + child_catalog->Checksum = 0; child_catalog->ResourceForkSize = 0UL; child_catalog->DataForkSize = 0UL; child_catalog->CatalogFlags = kNeFSStatusUnlocked; @@ -340,7 +341,18 @@ _Output NEFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char child_catalog->Flags |= kNeFSFlagCreated; child_catalog->CatalogFlags = flags; - rt_copy_memory((VoidPtr)name, (VoidPtr)child_catalog->Name, + SizeT i = rt_string_len(name); + + // get rid pf \0 + --i; + + if (kind == kNeFSCatalogKindDir) + --i; + + while (name[i] != '/') + --i; + + rt_copy_memory((VoidPtr)(name + i), (VoidPtr)child_catalog->Name, rt_string_len(name)); NEFS_CATALOG_STRUCT temporary_catalog{}; @@ -737,7 +749,7 @@ _Output NEFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* if (!StringBuilder::Equals(catalog_name, NeFileSystemHelper::Root()) && local_search) { - Char parent_name[kNeFSNodeNameLen] = {0}; + Char parent_name[kNeFSCatalogNameLen] = {0}; for (SizeT indexFill = 0; indexFill < rt_string_len(catalog_name); ++indexFill) { @@ -787,6 +799,19 @@ _Output NEFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* NEFS_CATALOG_STRUCT temporary_catalog{}; + SizeT i = rt_string_len(catalog_name); + + // get rid of \0 + --i; + + if (catalog_name[i] == '/') + --i; + + while (catalog_name[i] != '/') + --i; + + const Char* tmp_name = (catalog_name + i); + kNeFSSearchThroughCatalogList: while (drive.fPacket.fPacketGood) { @@ -796,7 +821,7 @@ kNeFSSearchThroughCatalogList: drive.fInput(drive.fPacket); - if (StringBuilder::Equals(catalog_name, temporary_catalog.Name)) + if (StringBuilder::Equals(tmp_name, temporary_catalog.Name)) { if (temporary_catalog.Status == kNeFSStatusLocked && !search_hidden) -- cgit v1.2.3