From bf1629df18bbbbdb056f676d6c0b8c3a8119a8a2 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 1 May 2024 09:56:21 +0200 Subject: NewFS: format: FreeCatalog is now computed correctly. Signed-off-by: Amlal El Mahrouss --- Private/Source/AppMain.cxx | 2 +- Private/Source/FS/NewFS.cxx | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Private/Source/AppMain.cxx b/Private/Source/AppMain.cxx index d3f140d2..5618c574 100644 --- a/Private/Source/AppMain.cxx +++ b/Private/Source/AppMain.cxx @@ -67,7 +67,7 @@ class FilesystemAutomountProvider final { theFork.Kind = NewOS::kNewFSDataForkKind; const NewOS::Char metadataFolder[kNewFSSectorSz] = - "

Kind: folder

\r

Created by System.

\r"; + "

Kind: folder

\r

Created by: system

\r"; const NewOS::SizeT metadataSz = kNewFSSectorSz; auto catalogSystem = fNewFS->GetImpl()->GetCatalog("/System/"); diff --git a/Private/Source/FS/NewFS.cxx b/Private/Source/FS/NewFS.cxx index 3e247360..34a89d5d 100644 --- a/Private/Source/FS/NewFS.cxx +++ b/Private/Source/FS/NewFS.cxx @@ -405,7 +405,7 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive) { partBlock->CatalogCount = sectorCount / sizeof(NewCatalog); partBlock->SectorCount = sectorCount; partBlock->DiskSize = diskSize; - partBlock->FreeCatalog = partBlock->StartCatalog; + partBlock->FreeCatalog = sectorCount / sizeof(NewCatalog); drive->fPacket.fPacketContent = sectorBuf; drive->fPacket.fPacketSize = kNewFSSectorSz; @@ -621,6 +621,21 @@ Boolean NewFSParser::RemoveCatalog(_Input const Char* catalogName) { drive->fOutput(&drive->fPacket); // send packet. + Char partitonBlockBuf[sizeof(NewPartitionBlock)] = { 0 }; + + drive->fPacket.fLba = kNewFSAddressAsLba; + drive->fPacket.fPacketContent = partitonBlockBuf; + drive->fPacket.fPacketSize = sizeof(NewPartitionBlock); + + drive->fInput(&drive->fPacket); + + NewPartitionBlock* partBlock = reinterpret_cast(partitonBlockBuf); + + ++partBlock->FreeCatalog; + --partBlock->CatalogCount; + + drive->fOutput(&drive->fPacket); + return true; } -- cgit v1.2.3