diff --git a/Source/mpq/mpq_reader.cpp b/Source/mpq/mpq_reader.cpp index 3f2144182..d02652a78 100644 --- a/Source/mpq/mpq_reader.cpp +++ b/Source/mpq/mpq_reader.cpp @@ -96,7 +96,7 @@ std::unique_ptr MpqArchive::ReadFile(std::string_view filename, std return result; } -int32_t MpqArchive::ReadBlock(uint32_t fileNumber, uint32_t blockNumber, uint8_t *out, uint32_t outSize) +int32_t MpqArchive::ReadBlock(uint32_t fileNumber, uint32_t blockNumber, uint8_t *out, size_t outSize) { std::vector &tmpBuf = GetTemporaryBuffer(outSize); return libmpq__block_read_with_temporary_buffer( diff --git a/Source/mpq/mpq_reader.hpp b/Source/mpq/mpq_reader.hpp index 7a359fb40..eb6fa46d0 100644 --- a/Source/mpq/mpq_reader.hpp +++ b/Source/mpq/mpq_reader.hpp @@ -44,7 +44,7 @@ public: std::unique_ptr ReadFile(std::string_view filename, std::size_t &fileSize, int32_t &error); // Returns error code. - int32_t ReadBlock(uint32_t fileNumber, uint32_t blockNumber, uint8_t *out, uint32_t outSize); + int32_t ReadBlock(uint32_t fileNumber, uint32_t blockNumber, uint8_t *out, size_t outSize); std::size_t GetUnpackedFileSize(uint32_t fileNumber, int32_t &error); diff --git a/Source/mpq/mpq_sdl_rwops.cpp b/Source/mpq/mpq_sdl_rwops.cpp index b360953c6..a49a04f8e 100644 --- a/Source/mpq/mpq_sdl_rwops.cpp +++ b/Source/mpq/mpq_sdl_rwops.cpp @@ -15,13 +15,13 @@ struct Data { std::optional ownedArchive; MpqArchive *mpqArchive; uint32_t fileNumber; - uint32_t blockSize; - uint32_t lastBlockSize; + size_t blockSize; + size_t lastBlockSize; uint32_t numBlocks; - uint32_t size; + size_t size; // State: - uint32_t position; + size_t position; bool blockRead; std::unique_ptr blockData; }; @@ -56,25 +56,25 @@ static Sint64 MpqFileRwSize(struct SDL_RWops *context) static OffsetType MpqFileRwSeek(struct SDL_RWops *context, OffsetType offset, int whence) { Data &data = *GetData(context); - OffsetType newPosition; + size_t newPosition; switch (whence) { case RW_SEEK_SET: - newPosition = offset; + newPosition = static_cast(offset); break; case RW_SEEK_CUR: - newPosition = data.position + offset; + newPosition = static_cast(data.position + offset); break; case RW_SEEK_END: - newPosition = data.size + offset; + newPosition = static_cast(data.size + offset); break; default: return -1; } - if (newPosition == static_cast(data.position)) - return newPosition; + if (newPosition == data.position) + return static_cast(newPosition); - if (newPosition > static_cast(data.size)) { + if (newPosition > data.size) { SDL_SetError("MpqFileRwSeek beyond EOF (%d > %u)", static_cast(newPosition), data.size); return -1; } @@ -89,14 +89,14 @@ static OffsetType MpqFileRwSeek(struct SDL_RWops *context, OffsetType offset, in data.position = newPosition; - return newPosition; + return static_cast(newPosition); } static SizeType MpqFileRwRead(struct SDL_RWops *context, void *ptr, SizeType size, SizeType maxnum) { Data &data = *GetData(context); - const SizeType totalSize = size * maxnum; - uint32_t remainingSize = totalSize; + const size_t totalSize = size * maxnum; + size_t remainingSize = totalSize; auto *out = static_cast(ptr); @@ -104,13 +104,13 @@ static SizeType MpqFileRwRead(struct SDL_RWops *context, void *ptr, SizeType siz data.blockData = std::unique_ptr { new uint8_t[data.blockSize] }; } - uint32_t blockNumber = data.position / data.blockSize; + uint32_t blockNumber = static_cast(data.position / data.blockSize); while (remainingSize > 0) { if (data.position == data.size) { break; } - const uint32_t currentBlockSize = blockNumber + 1 == data.numBlocks ? data.lastBlockSize : data.blockSize; + const size_t currentBlockSize = blockNumber + 1 == data.numBlocks ? data.lastBlockSize : data.blockSize; if (!data.blockRead) { const int32_t error = data.mpqArchive->ReadBlock(data.fileNumber, blockNumber, data.blockData.get(), currentBlockSize); @@ -121,8 +121,8 @@ static SizeType MpqFileRwRead(struct SDL_RWops *context, void *ptr, SizeType siz data.blockRead = true; } - const uint32_t blockPosition = data.position - blockNumber * data.blockSize; - const uint32_t remainingBlockSize = currentBlockSize - blockPosition; + const size_t blockPosition = data.position - blockNumber * data.blockSize; + const size_t remainingBlockSize = currentBlockSize - blockPosition; if (remainingSize < remainingBlockSize) { std::memcpy(out, data.blockData.get() + blockPosition, remainingSize); @@ -138,7 +138,7 @@ static SizeType MpqFileRwRead(struct SDL_RWops *context, void *ptr, SizeType siz data.blockRead = false; } - return (totalSize - remainingSize) / size; + return static_cast((totalSize - remainingSize) / size); } static int MpqFileRwClose(struct SDL_RWops *context) @@ -206,7 +206,7 @@ SDL_RWops *SDL_RWops_FromMpqFile(MpqArchive &mpqArchive, uint32_t fileNumber, st } data->numBlocks = numBlocks; - const std::uint32_t blockSize = archive.GetBlockSize(fileNumber, 0, error); + const size_t blockSize = archive.GetBlockSize(fileNumber, 0, error); if (error != 0) { SDL_SetError("MpqFileRwRead GetBlockSize: %s", MpqArchive::ErrorMessage(error)); return nullptr;