From 74d369869f63577e34bb226891e6e1aad07c43c4 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sun, 16 Nov 2025 18:39:11 +0100 Subject: [PATCH] Use CFile for ZipWriter --- openVulkanoCpp/IO/Archive/ZipWriter.cpp | 38 ++++++++++++------------- openVulkanoCpp/IO/Archive/ZipWriter.hpp | 7 +++-- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/openVulkanoCpp/IO/Archive/ZipWriter.cpp b/openVulkanoCpp/IO/Archive/ZipWriter.cpp index 6f5f3af..bdf3b14 100644 --- a/openVulkanoCpp/IO/Archive/ZipWriter.cpp +++ b/openVulkanoCpp/IO/Archive/ZipWriter.cpp @@ -157,27 +157,26 @@ namespace namespace OpenVulkano { - ZipWriter::ZipWriter(const std::filesystem::path& filePath, bool alignHeadersBy64) + ZipWriter::ZipWriter(const std::filesystem::path& filePath, const bool alignHeadersBy64) + : m_file(filePath, CFile::WRITE_BINARY), m_pad(alignHeadersBy64) { - m_file = fopen(filePath.string().c_str(), "wb"); if (!m_file) { throw std::runtime_error("Unable to open file for writing: " + filePath.string()); } - m_pad = alignHeadersBy64; } void ZipWriter::AddFile(const FileDescription& description, const void* buffer) { - size_t fileSize = description.size; - size_t fileNameLength = description.path.size(); - uint8_t *fileName = (uint8_t*)description.path.data(); + const size_t fileSize = description.size; + const size_t fileNameLength = description.path.size(); + const uint8_t* fileName = (uint8_t*)description.path.data(); CRC32 crc; - crc.Update(fileSize, (const uint8_t *)buffer); - uint32_t crc32 = crc.GetValue(); - time_t createTime = description.createTime; - time_t modTime = description.modTime; - time_t accessTime = modTime; // FileDescription doesn't have this field + crc.Update(fileSize, (const uint8_t*)buffer); + const uint32_t crc32 = crc.GetValue(); + const time_t createTime = description.createTime; + const time_t modTime = description.modTime; + const time_t accessTime = modTime; // FileDescription doesn't have this field auto [dosTime, dosDate] = ConvertToDosTimeDate(modTime); LocalFileHeader lfh; @@ -196,19 +195,19 @@ namespace OpenVulkano } size_t headerOffset = ftell(m_file); - fwrite(&lfh, sizeof(lfh), 1, m_file); - fwrite(fileName, fileNameLength, 1, m_file); + m_file.Write(&lfh, sizeof(lfh), 1); + m_file.Write(fileName, fileNameLength); if (m_pad) { uint16_t marker = 6534; uint16_t dataSize = lfh.extraFieldLength - 4; - fwrite(&marker, sizeof(uint16_t), 1, m_file); - fwrite(&dataSize, sizeof(uint16_t), 1, m_file); + m_file.Write(&marker, sizeof(uint16_t)); + m_file.Write(&dataSize, sizeof(uint16_t)); ZFill<128>(m_file, dataSize); } - fwrite(buffer, fileSize, 1, m_file); + m_file.Write(buffer, fileSize); CentralDirectoryFileHeader cdfh; cdfh.fileLastModTime = dosTime; @@ -241,11 +240,11 @@ namespace OpenVulkano if (IsOpen()) { int centralDirsOffset = 0; - size_t centralDirsSize = m_centralDirs.size(); + const size_t centralDirsSize = m_centralDirs.size(); if (m_numFiles) { centralDirsOffset = ftell(m_file); - fwrite(m_centralDirs.data(), centralDirsSize, 1, m_file); + m_file.Write(m_centralDirs.data(), centralDirsSize); m_centralDirs.clear(); } @@ -254,8 +253,7 @@ namespace OpenVulkano eocd.centralDirectoryOffset = centralDirsOffset; eocd.centralDirectorySize = centralDirsSize; - fwrite(&eocd, sizeof(eocd), 1, m_file); - fclose(m_file); + m_file.Write(&eocd, sizeof(eocd)); } } } \ No newline at end of file diff --git a/openVulkanoCpp/IO/Archive/ZipWriter.hpp b/openVulkanoCpp/IO/Archive/ZipWriter.hpp index d93e6f1..5c538e5 100644 --- a/openVulkanoCpp/IO/Archive/ZipWriter.hpp +++ b/openVulkanoCpp/IO/Archive/ZipWriter.hpp @@ -5,6 +5,7 @@ */ #pragma once +#include "IO/CFile.hpp" #include "IO/FileDescription.hpp" #include @@ -18,13 +19,13 @@ namespace OpenVulkano std::vector m_centralDirs; int m_numFiles = 0; bool m_pad = false; - FILE* m_file; + CFile m_file; public: - ZipWriter(const std::filesystem::path& filePath, bool alignHeadersby64 = false); + ZipWriter(const std::filesystem::path& filePath, bool alignHeadersBy64 = false); ~ZipWriter(); - bool IsOpen() const { return m_file != nullptr; } + bool IsOpen() const { return m_file; } operator bool() const { return IsOpen(); } void AddFile(const FileDescription& description, const void* buffer);