From d689361b7bacb627019507a0ec80b4769e9c5f8f Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Sun, 2 Jun 2024 15:24:42 +0200 Subject: [PATCH] Fixed makedisk.c --- include/fs/fs_h.swo | Bin 12288 -> 0 bytes include/fs/fs_h.swp | Bin 12288 -> 0 bytes makeDisk.c | 34 ++++++++++++++++++++-------------- 3 files changed, 20 insertions(+), 14 deletions(-) delete mode 100644 include/fs/fs_h.swo delete mode 100644 include/fs/fs_h.swp diff --git a/include/fs/fs_h.swo b/include/fs/fs_h.swo deleted file mode 100644 index 9e95f281fdc06c3b303a9060a38124bd7a07f056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 MBh+1lgq$V+1HUm5BLDyZ diff --git a/makeDisk.c b/makeDisk.c index 1136470..73b3411 100644 --- a/makeDisk.c +++ b/makeDisk.c @@ -66,10 +66,10 @@ int main(int argc, char** argv) { } printf("Building disk image %s...\n", IMAGE_NAME); - printf("Block size: %d Bytes, Total disk blocks: %d\n", FS_BLOCK_SIZE, bytesToBlocks(diskSize)); - printf("Used blocks: %d, Free blocks %d\n\n", fileBlocks, bytesToBlocks(diskSize) - fileBlocks); - printf("%d files (2 hidden)\n", fileCount); // Stage 1 and 2 is hidden + printf("Block size: %d Bytes, Total disk blocks: %d (%d Bytes)\n\n", FS_BLOCK_SIZE, bytesToBlocks(diskSize), diskSize); + printf("%d files (2 hidden)\n", fileCount); // Stage 1 and 2 is hidden + // Build disk image writeBootblock(); writeSuperblock(); @@ -78,11 +78,15 @@ int main(int argc, char** argv) { writeINodeBlocks(); writeDataBlocks(); - // Pad out to the whole disk size uint32_t writtenBlocks = 2 + superblock.inodeBitmapBlockCount + superblock.dataBitmapBlockCount + superblock.inodeBlockCount + superblock.dataBlockCount; + printf("\nWritten blocks: %d (%d Bytes)\n", writtenBlocks, writtenBlocks * FS_BLOCK_SIZE); + printf("Free blocks: %d (%d Bytes)\n", bytesToBlocks(diskSize) - writtenBlocks, diskSize - writtenBlocks * FS_BLOCK_SIZE); + + // Pad out to the whole disk size + /* for (uint32_t i = 0; i < bytesToBlocks(diskSize) - writtenBlocks; i++) { assert(fwrite(nullBlock, FS_BLOCK_SIZE, 1, imagePtr) == 1); - } + } */ // Cleanup for (uint32_t i = 0; i < fileCount; i++) { @@ -113,17 +117,17 @@ void writeBootblock() { } void writeSuperblock() { - superblock.inodeCount = fileCount + 2; // 2 reserved INodes (0 - Invalid, 1 - Root) + superblock.inodeCount = fileCount; // 2 reserved INodes (0 - Invalid, 1 - Root) superblock.firstInodeBitmapBlock = 2; // Block 0 - Boot, Block 1 - Superblock superblock.inodeBitmapBlockCount = superblock.inodeCount / (FS_BLOCK_SIZE * 8) + ((superblock.inodeCount % (FS_BLOCK_SIZE * 8) > 0) ? 1 : 0); superblock.firstDataBitmapBlock = superblock.firstInodeBlock + superblock.inodeBitmapBlockCount; + superblock.inodeBlockCount = bytesToBlocks(superblock.inodeCount * sizeof(inode_t)); dataBlocks = bytesToBlocks(diskSize); - dataBitCount = (dataBlocks - superblock.firstDataBitmapBlock); + dataBitCount = (dataBlocks - superblock.firstDataBitmapBlock - superblock.inodeBlockCount); superblock.dataBitmapBlockCount = dataBitCount / (FS_BLOCK_SIZE * 8) + ((dataBitCount % (FS_BLOCK_SIZE * 8) > 0) ? 1 : 0); superblock.firstInodeBlock = superblock.firstDataBitmapBlock + superblock.dataBitmapBlockCount; - superblock.inodeBlockCount = bytesToBlocks(superblock.inodeCount * sizeof(inode_t)); superblock.firstDataBlock = superblock.firstInodeBlock + superblock.inodeBlockCount; superblock.dataBlockCount = (fileBlocks - 2) + 1; // 1 Block for root dir (-1 for boot block) superblock.maxFileSize = 0xffffffff; @@ -139,7 +143,7 @@ void writeSuperblock() { superblock.firstUnreservedInode = 3; // 0 - Invalid; 1 - Root dir; 2 - Bootloader INode assert(fwrite(&superblock, sizeof(superBlock_t), 1, imagePtr) == 1); - assert(fwrite(&nullBlock, paddingBytes(sizeof(superBlock_t), FS_BLOCK_SIZE), 1, imagePtr) == 1); // Padding + assert(fwrite(nullBlock, paddingBytes(sizeof(superBlock_t), FS_BLOCK_SIZE), 1, imagePtr) == 1); // Padding } void writeINodeBitmapBlocks() { @@ -198,13 +202,14 @@ void writeINodeBlocks() { .length = bytesToBlocks(inode.sizeBytes), }, }; + + assert(fwrite(&inode, sizeof(inode), 1, imagePtr) == 1); // INode 2 - Bootloader (stage 3) followed by other INodes - uint32_t id = 2; uint32_t block = superblock.firstDataBlock + inode.extent[0].length; for (uint32_t i = 2; i < fileCount; i++) { memset(&inode, 0, sizeof(inode)); - inode.id = id++; + inode.id = i; inode.filetype = FILETYPE_FILE; inode.sizeBytes = files[i].size; inode.sizeSectors = bytesToSectors(inode.sizeBytes); @@ -243,15 +248,16 @@ void writeDataBlocks() { assert(fwrite(nullBlock, paddingBytes(fileCount * sizeof(dirEntry_t), FS_BLOCK_SIZE), 1, imagePtr) == 1); // Write actual file data - uint32_t bytesWritten = 0; for (uint32_t i = 2; i < fileCount; i++) { uint32_t blockCount = bytesToBlocks(files[i].size); + uint32_t bytesWritten = 0; + printf("%s, %d Bytes -> %d Blocks\n", files[i].name, files[i].size, blockCount); - bytesWritten = 0; for (uint32_t j = 0; j < blockCount * (FS_BLOCK_SIZE / FS_SECTOR_SIZE); j++) { uint32_t byteCount = fread(sector, 1, sizeof(sector), files[i].fp); - fwrite(sector, 1, sizeof(sector), imagePtr); + fwrite(sector, 1, byteCount, imagePtr); + bytesWritten += byteCount; if (byteCount < sizeof(sector)) break; // EOF