summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'dev/Kernel')
-rw-r--r--dev/Kernel/FSKit/HPFS.h19
-rw-r--r--dev/Kernel/FSKit/IndexableProperty.h6
-rw-r--r--dev/Kernel/FSKit/NeFS.h16
-rw-r--r--dev/Kernel/HALKit/AMD64/HalDebugOutput.cc2
-rw-r--r--dev/Kernel/HALKit/ARM64/Storage/MFlash+IO.cc15
-rw-r--r--dev/Kernel/NetworkKit/MAC.h2
-rw-r--r--dev/Kernel/src/FS/NeFS.cc33
7 files changed, 68 insertions, 25 deletions
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 <CompilerKit/CompilerKit.h>
#include <KernelKit/DriveMgr.h>
-#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<WideChar, kMACAddrLen>& 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)