diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-26 05:02:55 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-26 05:02:55 +0200 |
| commit | 9076aff05349093c2c6280287ee3257d9c07c014 (patch) | |
| tree | 9c415985dabaa37c7effc93306ca51e90c496e17 /dev/ZKA/Sources/FS | |
| parent | ff94ce367f7f23e3a78f157f9420c480a4d7f9aa (diff) | |
[IMP] Add page file inside \System\ (syspage.sys)
[FIX] Fix ATA support in bootloader and kernel.
[IMP] Add sector count macro in DriveManager.
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.cxx | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/dev/ZKA/Sources/FS/NewFS.cxx b/dev/ZKA/Sources/FS/NewFS.cxx index e55939f7..cdf9d6a4 100644 --- a/dev/ZKA/Sources/FS/NewFS.cxx +++ b/dev/ZKA/Sources/FS/NewFS.cxx @@ -62,7 +62,8 @@ STATIC MountpointInterface sMountpointInterface; _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* catalog, _Input NFS_FORK_STRUCT& theFork) { - if (catalog && theFork.ForkName[0] != 0) + if (catalog && theFork.ForkName[0] != 0 && + theFork.DataSize <= kNewFSForkSz) { Lba lba = (theFork.Kind == kNewFSDataForkKind) ? catalog->DataFork : catalog->ResourceFork; @@ -641,6 +642,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool : catalog->ResourceFork; NFS_FORK_STRUCT* forkDataIn = new NFS_FORK_STRUCT(); + NFS_FORK_STRUCT prevFork{}; // sanity check of the fork position as the condition to run the loop. while (startFork >= kNewFSCatalogStartAddress) @@ -666,25 +668,6 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool StringBuilder::Equals(forkDataIn->ForkName, forkName) && StringBuilder::Equals(forkDataIn->CatalogName, catalog->Name)) { - if (forkDataIn->DataSize < sizeOfData && - forkDataIn->DataSize < 1) - { - startFork = forkDataIn->NextSibling; - continue; - } - - drive.fPacket.fPacketContent = data; - drive.fPacket.fPacketSize = sizeOfData; - drive.fPacket.fLba = forkDataIn->DataOffset; - - kcout << "newoskrnl: data offset: " << hex_number(forkDataIn->DataOffset) << endl; - - drive.fOutput(&drive.fPacket); - - return true; - } - else - { // ===================================================== // // Store size of blob now. // ===================================================== // @@ -692,13 +675,13 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool if (forkDataIn->DataSize < sizeOfData && forkDataIn->DataSize < 1) { - startFork = forkDataIn->NextSibling + sizeof(NFS_FORK_STRUCT); + startFork = forkDataIn->NextSibling; continue; } - forkDataIn->Flags = kNewFSFlagCreated; + forkDataIn->Flags = kNewFSFlagCreated; forkDataIn->DataOffset = startFork + sizeof(NFS_FORK_STRUCT); - forkDataIn->DataSize = sizeOfData; + forkDataIn->DataSize = sizeOfData; drive.fPacket.fPacketContent = data; drive.fPacket.fPacketSize = sizeOfData; @@ -721,6 +704,10 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool return true; } + // stumble upon a fork, store it. + + prevFork = *forkDataIn; + startFork = forkDataIn->NextSibling + forkDataIn->DataSize; } |
