summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources/FS
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-23 17:12:37 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-23 17:13:00 +0200
commitc9fef8cfeae2047b66858385689d448a1ad5b8d0 (patch)
tree1d55c0af46da0bf0db9b32362b404bb6a51f27ef /dev/ZKA/Sources/FS
parent58ec3282634ccf75006043017ceacffed9a4533c (diff)
[FIX+IMP] 'User' login system in order to use the system according to
permissions. 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.cxx73
1 files changed, 31 insertions, 42 deletions
diff --git a/dev/ZKA/Sources/FS/NewFS.cxx b/dev/ZKA/Sources/FS/NewFS.cxx
index 88c415eb..36e0755e 100644
--- a/dev/ZKA/Sources/FS/NewFS.cxx
+++ b/dev/ZKA/Sources/FS/NewFS.cxx
@@ -388,7 +388,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
return nullptr;
}
- catalogChild->DataFork = partBlock->DiskSize - partBlock->StartCatalog;
+ catalogChild->DataFork = partBlock->DiskSize - start_free;
catalogChild->ResourceFork = catalogChild->DataFork;
catalogChild->NextSibling =
@@ -624,19 +624,19 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
auto startFork = (!isRsrcFork) ? catalog->DataFork
: catalog->ResourceFork;
- NFS_FORK_STRUCT forkDataIn{0};
+ NFS_FORK_STRUCT* forkDataIn = new NFS_FORK_STRUCT();
// sanity check of the fork position as the condition to run the loop.
while (startFork >= kNewFSCatalogStartAddress)
{
- drive.fPacket.fPacketContent = &forkDataIn;
+ drive.fPacket.fPacketContent = forkDataIn;
drive.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT);
drive.fPacket.fLba = startFork;
drive.fInput(&drive.fPacket);
// check the fork, if it's position is valid.
- if (forkDataIn.DataOffset <= kNewFSCatalogStartAddress)
+ if (forkDataIn->DataOffset <= kNewFSCatalogStartAddress)
{
ErrLocal() = kErrorDiskIsCorrupted;
@@ -645,22 +645,23 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
return false;
}
- if (forkDataIn.Flags != kNewFSFlagUnallocated &&
- forkDataIn.Flags != kNewFSFlagDeleted &&
- StringBuilder::Equals(forkDataIn.ForkName, forkName) &&
- StringBuilder::Equals(forkDataIn.CatalogName, catalog->Name))
+ if (forkDataIn->Flags != kNewFSFlagUnallocated &&
+ forkDataIn->Flags != kNewFSFlagDeleted &&
+ StringBuilder::Equals(forkDataIn->ForkName, forkName) &&
+ StringBuilder::Equals(forkDataIn->CatalogName, catalog->Name))
{
- if (forkDataIn.DataSize < sizeOfData)
+ if (forkDataIn->DataSize < sizeOfData &&
+ forkDataIn->DataSize < 1)
{
- startFork = forkDataIn.NextSibling;
+ startFork = forkDataIn->NextSibling;
continue;
}
drive.fPacket.fPacketContent = data;
drive.fPacket.fPacketSize = sizeOfData;
- drive.fPacket.fLba = forkDataIn.DataOffset;
+ drive.fPacket.fLba = forkDataIn->DataOffset;
- kcout << "newoskrnl: data offset: " << hex_number(forkDataIn.DataOffset) << endl;
+ kcout << "newoskrnl: data offset: " << hex_number(forkDataIn->DataOffset) << endl;
drive.fOutput(&drive.fPacket);
@@ -672,19 +673,22 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
// Store size of blob now.
// ===================================================== //
- if (forkDataIn.DataSize < sizeOfData)
+ if (forkDataIn->DataSize < sizeOfData &&
+ forkDataIn->DataSize < 1)
{
- startFork = forkDataIn.NextSibling;
+ startFork = forkDataIn->NextSibling + sizeof(NFS_FORK_STRUCT);
continue;
}
- forkDataIn.Flags = kNewFSFlagCreated;
+ forkDataIn->Flags = kNewFSFlagCreated;
+ forkDataIn->DataOffset = startFork + sizeof(NFS_FORK_STRUCT);
+ forkDataIn->DataSize = sizeOfData;
drive.fPacket.fPacketContent = data;
drive.fPacket.fPacketSize = sizeOfData;
- drive.fPacket.fLba = forkDataIn.DataOffset;
+ drive.fPacket.fLba = startFork + sizeof(NFS_FORK_STRUCT);
- kcout << "newoskrnl: data offset: " << hex_number(forkDataIn.DataOffset) << endl;
+ kcout << "newoskrnl: data offset: " << hex_number(forkDataIn->DataOffset) << endl;
drive.fOutput(&drive.fPacket);
@@ -694,14 +698,14 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
drive.fOutput(&drive.fPacket);
- kcout << "newoskrnl: wrote fork at offset: " << hex_number(forkDataIn.DataOffset) << endl;
+ kcout << "newoskrnl: wrote fork at offset: " << hex_number(forkDataIn->DataOffset) << endl;
delete catalog;
return true;
}
- startFork = forkDataIn.NextSibling;
+ startFork = forkDataIn->NextSibling + forkDataIn->DataSize;
}
return false;
@@ -931,6 +935,8 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
return nullptr;
}
+ constexpr auto cNewFSCatalogPadding = 4;
+
Lba dataForkLba = (!isRsrcFork) ? catalog->DataFork : catalog->ResourceFork;
Size dataForkSize = (!isRsrcFork) ? catalog->DataForkSize : catalog->ResourceForkSize;
@@ -938,14 +944,14 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
<< ", fork: " << hex_number(dataForkLba) << endl;
NFS_FORK_STRUCT* fs_buf = new NFS_FORK_STRUCT();
- auto drive = sMountpointInterface.A();
+ auto drive = sMountpointInterface.A();
rt_copy_memory((VoidPtr) "fs/newfs-packet", drive.fPacket.fPacketMime,
rt_string_len("fs/newfs-packet"));
NFS_FORK_STRUCT* fs_fork_data = nullptr;
- while (dataForkLba >= kNewFSCatalogStartAddress)
+ while (dataForkLba > kNewFSCatalogStartAddress)
{
drive.fPacket.fLba = dataForkLba;
drive.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT);
@@ -955,16 +961,8 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
fs_fork_data = fs_buf;
- kcout << "newoskrnl: name: " << fs_fork_data->ForkName << endl;
-
- if (fs_fork_data->DataOffset <= kNewFSCatalogStartAddress)
- {
- delete[] fs_buf;
-
- kcout << "Fail-Data-Offset: " << hex_number(fs_fork_data->DataOffset) << endl;
-
- return nullptr;
- }
+ kcout << "newoskrnl: ForkName: " << fs_fork_data->ForkName << endl;
+ kcout << "newoskrnl: CatalogName: " << fs_fork_data->CatalogName << endl;
if (StringBuilder::Equals(forkName, fs_fork_data->ForkName) &&
StringBuilder::Equals(catalog->Name, fs_fork_data->CatalogName))
@@ -973,22 +971,13 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
dataForkLba = fs_fork_data->NextSibling;
}
- if (dataForkLba <= kNewFSCatalogStartAddress)
+ if (dataForkLba < kNewFSCatalogStartAddress)
{
delete[] fs_buf;
return nullptr;
}
- NFS_FORK_STRUCT* forkBuf = new NFS_FORK_STRUCT();
-
- drive.fPacket.fLba = fs_fork_data->DataOffset;
- drive.fPacket.fPacketSize = dataSz;
- drive.fPacket.fPacketContent = forkBuf;
-
- drive.fInput(&drive.fPacket);
-
- delete[] fs_buf;
- return forkBuf;
+ return fs_fork_data;
}
/***********************************************************************************/