summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources/FS
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-22 18:02:40 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-22 18:02:40 +0200
commit10099e99847307fae60aebdf2292002d359d45b4 (patch)
tree718ab13485520d1e69b908b48baf48e988c64985 /dev/ZKA/Sources/FS
parentb843322161bec86e707c45962ce9b7b76b0d1826 (diff)
[FIX] Work In Progress patches regarding user login and filesystem
driver. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKA/Sources/FS')
-rw-r--r--dev/ZKA/Sources/FS/NewFS.cxx82
1 files changed, 40 insertions, 42 deletions
diff --git a/dev/ZKA/Sources/FS/NewFS.cxx b/dev/ZKA/Sources/FS/NewFS.cxx
index bea3e9ec..503c184b 100644
--- a/dev/ZKA/Sources/FS/NewFS.cxx
+++ b/dev/ZKA/Sources/FS/NewFS.cxx
@@ -94,7 +94,7 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
kcout << "newoskrnl: next fork: " << hex_number(curFork.NextSibling) << endl;
- if (curFork.Flags == kNewFSFlagCreated)
+ if (curFork.Flags & kNewFSFlagCreated)
{
kcout << "newoskrnl: fork already exists.\r";
@@ -133,7 +133,7 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
constexpr auto cForkPadding =
4; /// this value gives us space for the data offset.
- theFork.Flags = kNewFSFlagCreated;
+ theFork.Flags |= kNewFSFlagCreated;
theFork.DataOffset = lba - sizeof(NFS_FORK_STRUCT) * cForkPadding;
theFork.PreviousSibling = lbaOfPreviousFork;
theFork.NextSibling = theFork.DataOffset - theFork.DataSize;
@@ -307,23 +307,13 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
Int32 flagsList = flags;
- if (flagsList & kNewFSCatalogKindMetaFile)
- {
- if (UserManager::The()->GetCurrent() != UserManager::The()->fRootUser &&
- UserManager::The()->fRootUser)
- {
- delete catalogChild;
- return nullptr;
- }
- }
-
catalogChild->ResourceForkSize = cDefaultForkSize;
catalogChild->DataForkSize = cDefaultForkSize;
catalogChild->NextSibling = outLba;
catalogChild->PrevSibling = outLba;
catalogChild->Kind = kind;
- catalogChild->Flags = kNewFSFlagCreated | flagsList;
+ catalogChild->Flags |= kNewFSFlagCreated | flagsList;
rt_copy_memory((VoidPtr)name, (VoidPtr)catalogChild->Name,
rt_string_len(name));
@@ -367,7 +357,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
// ========================== //
// allocate catalog now...
// ========================== //
- if (nextSibling->Flags != kNewFSFlagCreated)
+ if (!(nextSibling->Flags & kNewFSFlagCreated))
{
Char sectorBufPartBlock[kNewFSSectorSz] = {0};
@@ -680,7 +670,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
continue;
}
- forkDataIn.Flags = kNewFSFlagCreated;
+ forkDataIn.Flags |= kNewFSFlagCreated;
drive.fPacket.fPacketContent = data;
drive.fPacket.fPacketSize = sizeOfData;
@@ -732,10 +722,13 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogN
NFS_ROOT_PARTITION_BLOCK* part = (NFS_ROOT_PARTITION_BLOCK*)sectorBuf;
auto startCatalogList = part->StartCatalog;
- const auto cCtartCatalogList = part->StartCatalog;
+ const auto cStartCatalogList = part->StartCatalog;
auto localSearchFirst = false;
+ delete sectorBuf;
+ sectorBuf = new Char[sizeof(NFS_CATALOG_STRUCT)];
+
drive.fPacket.fLba = startCatalogList;
drive.fPacket.fPacketContent = sectorBuf;
drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
@@ -781,52 +774,52 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogN
}
}
- kcout << "newoskrnl: fetching catalog...\r";
+ kcout << "newoskrnl: Fetching catalog: " << catalogName << "\r";
+
+ startCatalogList = cStartCatalogList;
_NewFSSearchThroughCatalogList:
while (drive.fPacket.fPacketGood)
{
- NFS_CATALOG_STRUCT* catalog = (NFS_CATALOG_STRUCT*)sectorBuf;
+ drive.fPacket.fLba = startCatalogList;
+ drive.fPacket.fPacketContent = sectorBuf;
+ drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
- if (StringBuilder::Equals(catalogName, catalog->Name))
- {
- /// ignore unallocated catalog, break
- if (catalog->Flags != kNewFSFlagCreated)
- {
- goto NewFSContinueSearch;
- }
+ drive.fInput(&drive.fPacket);
+
+ NFS_CATALOG_STRUCT* catalog = (NFS_CATALOG_STRUCT*)sectorBuf;
- NFS_CATALOG_STRUCT* catalogPtr = new NFS_CATALOG_STRUCT();
- rt_copy_memory(catalog, catalogPtr, sizeof(NFS_CATALOG_STRUCT));
+ kcout << "newoskrnl: Fetching catalog: " << catalog->Name << "\r";
+ kcout << "newoskrnl: Fetching catalog: " << catalogName << "\r";
- kcout << "newoskrnl: found catalog at: " << hex_number(startCatalogList) << endl;
+ if (StringBuilder::Equals(catalogName, catalog->Name) &&
+ (catalog->Flags & kNewFSFlagCreated))
+ {
+ kcout << "newoskrnl: Found catalog at: " << hex_number(startCatalogList) << endl;
outLba = startCatalogList;
- delete[] sectorBuf;
- return catalogPtr;
+ return catalog;
}
NewFSContinueSearch:
startCatalogList = catalog->NextSibling;
if (startCatalogList <= kNewFSStartLba)
+ {
break;
-
- drive.fPacket.fLba = startCatalogList;
- drive.fPacket.fPacketContent = sectorBuf;
- drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
-
- drive.fInput(&drive.fPacket);
+ }
}
if (localSearchFirst)
{
localSearchFirst = false;
- startCatalogList = cCtartCatalogList;
+ startCatalogList = cStartCatalogList;
goto _NewFSSearchThroughCatalogList;
}
+ kcout << "Didnt find it.\r";
+
outLba = 0UL;
delete[] sectorBuf;
@@ -838,8 +831,10 @@ _NewFSSearchThroughCatalogList:
/// @return
_Output NFS_CATALOG_STRUCT* NewFSParser::GetCatalog(_Input const Char* name)
{
- Lba unused = 0;
- return this->FindCatalog(name, unused);
+ Lba unused = 0;
+ NFS_CATALOG_STRUCT* catalog = this->FindCatalog(name, unused);
+
+ return catalog;
}
/// @brief Closes a catalog, (frees it).
@@ -872,9 +867,9 @@ Boolean NewFSParser::RemoveCatalog(_Input const Char* catalogName)
auto catalog = this->FindCatalog(catalogName, outLba);
if (outLba >= kNewFSCatalogStartAddress ||
- catalog->Flags == kNewFSFlagCreated)
+ (catalog->Flags & kNewFSFlagCreated))
{
- catalog->Flags = kNewFSFlagDeleted;
+ catalog->Flags |= kNewFSFlagDeleted;
auto drive = sMountpointInterface.A();
@@ -923,6 +918,7 @@ Boolean NewFSParser::RemoveCatalog(_Input const Char* catalogName)
/***********************************************************************************/
VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
+ _Input Bool isRsrcFork,
_Input SizeT dataSz,
_Input const Char* forkName)
{
@@ -932,10 +928,12 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
return nullptr;
}
+ kcout << "newoskrnl: Reading catalog..\r";
+
Lba dataForkLba = catalog->DataFork;
Size dataForkSize = catalog->DataForkSize;
- kcout << "newoskrnl: catalog " << catalog->Name
+ kcout << "newoskrnl: Catalog " << catalog->Name
<< ", fork: " << hex_number(dataForkLba) << endl;
Char* sectorBuf = new Char[sizeof(NFS_FORK_STRUCT)];