summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dev/Kernel/FSKit/NeFS.h16
-rw-r--r--dev/Kernel/src/BitMapMgr.cc2
-rw-r--r--dev/Kernel/src/DriveMgr.cc26
-rw-r--r--dev/Kernel/src/FS/NeFS.cc24
4 files changed, 33 insertions, 35 deletions
diff --git a/dev/Kernel/FSKit/NeFS.h b/dev/Kernel/FSKit/NeFS.h
index b03b4e74..d9a55789 100644
--- a/dev/Kernel/FSKit/NeFS.h
+++ b/dev/Kernel/FSKit/NeFS.h
@@ -142,6 +142,8 @@ enum
/// @brief Catalog type.
struct PACKED NFS_CATALOG_STRUCT final
{
+ BOOL ForkOrCatalog : 1{0};
+
Kernel::Char Name[kNeFSNodeNameLen] = {0};
Kernel::Char Mime[kNeFSMimeNameLen] = {0};
@@ -177,6 +179,8 @@ struct PACKED NFS_CATALOG_STRUCT final
/// whereas the data fork is reserved for file data.
struct PACKED NFS_FORK_STRUCT final
{
+ BOOL ForkOrCatalog : 1{1};
+
Kernel::Char ForkName[kNeFSForkNameLen] = {0};
Kernel::Char CatalogName[kNeFSNodeNameLen] = {0};
@@ -192,6 +196,8 @@ struct PACKED NFS_FORK_STRUCT final
Kernel::Lba NextSibling;
Kernel::Lba PreviousSibling;
+
+ Kernel::Char Pad[2] = {0};
};
/// @brief Partition block type
@@ -263,7 +269,7 @@ namespace Kernel
/// @param catalog it's catalog
/// @param theFork the fork itself.
/// @return the fork
- _Output BOOL CreateFork(_Input NFS_CATALOG_STRUCT* catalog,
+ _Output BOOL CreateFork(_Input const Char* catalog,
_Input NFS_FORK_STRUCT& theFork);
/// @brief Find fork inside New filesystem.
@@ -398,13 +404,12 @@ namespace Kernel
Char* xml_data,
Char* journal_name)
{
- if (!parser ||
- !mNode)
+ if (!parser)
return NO;
NFS_FORK_STRUCT new_fork{};
- rt_copy_memory(mNode->Name, new_fork.CatalogName, rt_string_len(mNode->Name));
+ rt_copy_memory(mStamp, new_fork.CatalogName, rt_string_len(mStamp));
rt_copy_memory(journal_name, new_fork.ForkName, rt_string_len(journal_name));
new_fork.ResourceKind = kNeFSCatalogKindMetaFile;
@@ -413,7 +418,8 @@ namespace Kernel
new_fork.DataSize = rt_string_len(xml_data);
new_fork.Kind = kNeFSRsrcForkKind;
- parser->CreateFork(mNode, new_fork);
+ if (!parser->CreateFork(mStamp, new_fork))
+ return NO;
kcout << "Commit: " << xml_data << "\r\nTo: " << journal_name << endl;
diff --git a/dev/Kernel/src/BitMapMgr.cc b/dev/Kernel/src/BitMapMgr.cc
index 7ce6ba1a..5407b3fc 100644
--- a/dev/Kernel/src/BitMapMgr.cc
+++ b/dev/Kernel/src/BitMapMgr.cc
@@ -108,7 +108,7 @@ namespace Kernel
return (VoidPtr)ptr_bit_set;
}
- kcout << "Missed potnetial bitmp!\r\n";
+ kcout << "Missed potential BitMap as it is already used!\r\n";
}
else if (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic)
{
diff --git a/dev/Kernel/src/DriveMgr.cc b/dev/Kernel/src/DriveMgr.cc
index 544c0c26..ab966575 100644
--- a/dev/Kernel/src/DriveMgr.cc
+++ b/dev/Kernel/src/DriveMgr.cc
@@ -32,17 +32,6 @@ namespace Kernel
return;
}
- if (pckt->fPacketDrive->fSectorSz == 0)
- {
-#ifdef __ATA_PIO__
- pckt->fPacketDrive->fSectorSz = kATASectorSize;
-#elif defined(__AHCI__)
- pckt->fPacketDrive->fSectorSz = kAHCISectorSize;
-#else
- pckt->fPacketDrive->fSectorSz = 512;
-#endif
- }
-
if (!StringBuilder::Equals("fs/detect-packet", pckt->fPacketMime) &&
pckt->fPacketDrive->fLbaStart > 0 && pckt->fPacketDrive->fLbaEnd > 0)
{
@@ -53,6 +42,8 @@ namespace Kernel
}
}
+ kcout << pckt->fPacketMime << endl;
+
#ifdef __AHCI__
drv_std_read(pckt->fPacketLba, (Char*)pckt->fPacketContent, pckt->fPacketDrive->fSectorSz, pckt->fPacketSize);
#elif defined(__ATA_PIO__) || defined(__ATA_DMA__)
@@ -70,15 +61,18 @@ namespace Kernel
return;
}
- if (!StringBuilder::Equals("fs/detect-packet", pckt->fPacketMime))
+ if (!StringBuilder::Equals("fs/detect-packet", pckt->fPacketMime) &&
+ pckt->fPacketDrive->fLbaStart > 0 && pckt->fPacketDrive->fLbaEnd > 0)
{
- if (pckt->fPacketLba < pckt->fPacketDrive->fLbaStart)
- return;
-
if (pckt->fPacketLba > pckt->fPacketDrive->fLbaEnd)
+ {
+ pckt->fPacketGood = NO;
return;
+ }
}
+ kcout << pckt->fPacketMime << endl;
+
#ifdef __AHCI__
drv_std_write(pckt->fPacketLba, (Char*)pckt->fPacketContent, pckt->fPacketDrive->fSectorSz, pckt->fPacketSize);
#elif defined(__ATA_PIO__) || defined(__ATA_DMA__)
@@ -197,7 +191,7 @@ namespace Kernel
#elif defined(__AHCI__)
trait.fSectorSz = kAHCISectorSize;
#else
- trait.fSectorSz = 512;
+ trait.fSectorSz = 512;
#endif
trait.fPacket.fPacketLba = kEPMBootBlockLba;
trait.fPacket.fPacketSize = sizeof(EPM_PART_BLOCK);
diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc
index 1f2f1c5e..10bcad02 100644
--- a/dev/Kernel/src/FS/NeFS.cc
+++ b/dev/Kernel/src/FS/NeFS.cc
@@ -60,11 +60,16 @@ STATIC MountpointInterface kDiskMountpoint;
/// @param the_fork the fork itself.
/// @return the fork
/***********************************************************************************/
-_Output BOOL NeFileSystemParser::CreateFork(_Input NFS_CATALOG_STRUCT* catalog,
+_Output BOOL NeFileSystemParser::CreateFork(_Input const Char* catalog_name,
_Input NFS_FORK_STRUCT& the_fork)
{
- if (catalog && the_fork.DataSize > 0)
- {
+ if (the_fork.DataSize > 0)
+ {
+ auto catalog = this->GetCatalog(catalog_name);
+
+ if (!catalog)
+ return NO;
+
Lba lba = (the_fork.Kind == kNeFSDataForkKind) ? catalog->DataFork
: catalog->ResourceFork;
@@ -79,12 +84,6 @@ _Output BOOL NeFileSystemParser::CreateFork(_Input NFS_CATALOG_STRUCT* catalog,
else
catalog->ResourceForkSize += the_fork.DataSize;
- drv.fPacket.fPacketLba = catalog->NextSibling - sizeof(NFS_CATALOG_STRUCT);
- drv.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
- drv.fPacket.fPacketContent = catalog;
-
- drv.fOutput(&drv.fPacket);
-
/// do not check for anything. Loop until we get what we want, that is a free fork zone.
while (lba_next_fork >= kNeFSCatalogStartAddress)
{
@@ -168,7 +167,6 @@ _Output NFS_FORK_STRUCT* NeFileSystemParser::FindFork(_Input NFS_CATALOG_STRUCT*
case 2:
err_global_get() = kErrorDiskIsFull;
break;
- case 3:
err_global_get() = kErrorNoSuchDisk;
break;
@@ -242,9 +240,9 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char*
Char parent_name[kNeFSNodeNameLen] = {0};
- for (SizeT index_name = 0UL; index_name < rt_string_len(name); ++index_name)
+ for (SizeT indexName = 0UL; indexName < rt_string_len(name); ++indexName)
{
- parent_name[index_name] = name[index_name];
+ parent_name[indexName] = name[indexName];
}
if (*parent_name == 0)
@@ -1003,4 +1001,4 @@ namespace Kernel::Detail
}
} // namespace Kernel::Detail
-#endif // ifdef __FSKIT_INCLUDES_NEFS__
+#endif // ifdef __FSKIT_INCLUDES_NEFS__ \ No newline at end of file