diff options
| author | Amlal <amlal@nekernel.org> | 2025-05-02 16:11:51 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-05-02 16:11:51 +0200 |
| commit | 7d1c053177ff178d86a17f3b19f92cf308bd0d2e (patch) | |
| tree | 34a89a5fc0318e36196a9a9a16a4a92875912cc7 /dev/kernel/src | |
| parent | 1d773bed5e4193d40a47f2dcd3a88adfd1e5269b (diff) | |
kernel, FS: Mostly patches regarding NeFS's formating and disk write implementation.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src')
| -rw-r--r-- | dev/kernel/src/FS/HeFS.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/src/FS/NeFS.cc | 51 |
2 files changed, 41 insertions, 14 deletions
diff --git a/dev/kernel/src/FS/HeFS.cc b/dev/kernel/src/FS/HeFS.cc index d2cb403e..2ae41331 100644 --- a/dev/kernel/src/FS/HeFS.cc +++ b/dev/kernel/src/FS/HeFS.cc @@ -397,7 +397,7 @@ namespace Detail { hefsi_traverse_tree(tmpend, mnt, root->fStartIND, child_first, YES); } } - + dirent->fNext = tmpdir->fNext; dirent->fPrev = tmpdir->fPrev; dirent->fParent = tmpdir->fParent; @@ -915,7 +915,7 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input drive->fOutput(drive->fPacket); (Void)(kout << "Drive kind: " << drive->fProtocol() << kendl); - (Void)(kout8 << u8"Partition name: " << root->fVolName << kendl8); + (Void)(kout8 << u8"Volume name: " << root->fVolName << kendl8); (Void)(kout << "Start IND: " << hex_number(root->fStartIND) << kendl); (Void)(kout << "Number of IND: " << hex_number(root->fINDCount) << kendl); (Void)(kout << "Sector size: " << hex_number(root->fSectorSize) << kendl); diff --git a/dev/kernel/src/FS/NeFS.cc b/dev/kernel/src/FS/NeFS.cc index e61a7c8a..4d9a2be1 100644 --- a/dev/kernel/src/FS/NeFS.cc +++ b/dev/kernel/src/FS/NeFS.cc @@ -462,10 +462,10 @@ bool NeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input const I part_block->StartCatalog = start + sizeof(NEFS_CATALOG_STRUCT); part_block->Flags = 0UL; part_block->CatalogCount = sectorCount / sizeof(NEFS_CATALOG_STRUCT); - part_block->FreeSectors = sectorCount / sizeof(NEFS_CATALOG_STRUCT); + part_block->FreeSectors = sectorCount / sizeof(NEFS_CATALOG_STRUCT) - 1; part_block->SectorCount = sectorCount; part_block->DiskSize = diskSize; - part_block->FreeCatalog = sectorCount / sizeof(NEFS_CATALOG_STRUCT); + part_block->FreeCatalog = sectorCount / sizeof(NEFS_CATALOG_STRUCT) - 1; drive->fPacket.fPacketContent = fs_buf; drive->fPacket.fPacketSize = sizeof(NEFS_ROOT_PARTITION_BLOCK); @@ -474,16 +474,32 @@ bool NeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input const I drive->fOutput(drive->fPacket); (Void)(kout << "Drive kind: " << drive->fProtocol() << kendl); - (Void)(kout << "Partition name: " << part_block->PartitionName << kendl); - (Void)(kout << "Start: " << hex_number(part_block->StartCatalog) << kendl); + (Void)(kout << "Start catalog: " << hex_number(part_block->StartCatalog) << kendl); (Void)(kout << "Number of catalogs: " << hex_number(part_block->CatalogCount) << kendl); (Void)(kout << "Free catalog: " << hex_number(part_block->FreeCatalog) << kendl); (Void)(kout << "Free sectors: " << hex_number(part_block->FreeSectors) << kendl); (Void)(kout << "Sector size: " << hex_number(part_block->SectorSize) << kendl); - // write the root catalog. - this->CreateCatalog(kNeFSRoot, 0, kNeFSCatalogKindDir); + NEFS_CATALOG_STRUCT root{}; + + rt_set_memory(&root, 0, sizeof(NEFS_CATALOG_STRUCT)); + + root.PrevSibling = part_block->StartCatalog; + root.NextSibling = 0UL; + + root.Kind = kNeFSCatalogKindDir; + root.Flags |= kNeFSFlagCreated; + root.CatalogFlags |= kNeFSStatusUnlocked; + + root.Name[0] = '/'; + root.Name[1] = 0; + + drive->fPacket.fPacketLba = part_block->StartCatalog; + drive->fPacket.fPacketSize = sizeof(NEFS_CATALOG_STRUCT); + drive->fPacket.fPacketContent = &root; + + drive->fOutput(drive->fPacket); return true; } @@ -546,16 +562,27 @@ bool NeFileSystemParser::WriteCatalog(_Input const Char* catalog_name, Bool is_r KStringBuilder::Equals(fork_data_input->CatalogName, catalog_name) && fork_data_input->DataSize == size_of_data) { // ===================================================== // - // Store the blob now. + // Store the blob now, into chunks. // ===================================================== // - drive.fPacket.fPacketContent = buf; - drive.fPacket.fPacketSize = size_of_data; - drive.fPacket.fPacketLba = fork_data_input->DataOffset; + auto cnt = size_of_data / kNeFSSectorSz; + auto cnter = 0UL; + auto compute_sz = kNeFSSectorSz; - (Void)(kout << "data offset: " << hex_number(fork_data_input->DataOffset) << kendl); + if (cnt < 1) break; - drive.fOutput(drive.fPacket); + while (compute_sz) { + drive.fPacket.fPacketContent = buf + (cnter * kNeFSSectorSz); + drive.fPacket.fPacketSize = compute_sz; + drive.fPacket.fPacketLba = fork_data_input->DataOffset; + + (Void)(kout << "data offset: " << hex_number(cnt * kNeFSSectorSz) << kendl); + + drive.fOutput(drive.fPacket); + + compute_sz /= (size_of_data / cnt); + ++cnter; + } (Void)(kout << "wrote data at offset: " << hex_number(fork_data_input->DataOffset) << kendl); |
