// Copyright 2019 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include "Common/CommonTypes.h" #include "Common/ScopeGuard.h" namespace Common { // Reads all of the current file. destination must be big enough to fit the whole file. template bool ReadFileFromZip(unzFile file, ContiguousContainer* destination) { const u32 MAX_BUFFER_SIZE = 65535; if (unzOpenCurrentFile(file) != UNZ_OK) return false; Common::ScopeGuard guard{[&] { unzCloseCurrentFile(file); }}; u32 bytes_to_go = static_cast(destination->size()); while (bytes_to_go > 0) { const int bytes_read = unzReadCurrentFile(file, &(*destination)[destination->size() - bytes_to_go], std::min(bytes_to_go, MAX_BUFFER_SIZE)); if (bytes_read < 0) return false; bytes_to_go -= static_cast(bytes_read); } return true; } } // namespace Common