add possibility to explicitly specify archive type for ArchiveReader
This commit is contained in:
@@ -20,22 +20,22 @@ namespace OpenVulkano
|
||||
constexpr int BUFFER_SIZE = 16384;
|
||||
}
|
||||
|
||||
ArchiveReader::ArchiveReader(const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveBase(archive_read_new(), nullptr, logger)
|
||||
ArchiveReader::ArchiveReader(const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
|
||||
: ArchiveBase(archive_read_new(), nullptr, logger), m_archiveType(archiveType)
|
||||
{}
|
||||
|
||||
ArchiveReader::ArchiveReader(const std::string& archiveFile, const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveReader(archiveFile.c_str(), logger)
|
||||
ArchiveReader::ArchiveReader(const std::string& archiveFile, const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
|
||||
: ArchiveReader(archiveFile.c_str(), logger, archiveType)
|
||||
{}
|
||||
|
||||
ArchiveReader::ArchiveReader(const char* archiveFile, const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveReader(logger)
|
||||
ArchiveReader::ArchiveReader(const char* archiveFile, const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
|
||||
: ArchiveReader(logger, archiveType)
|
||||
{
|
||||
Open(archiveFile);
|
||||
}
|
||||
|
||||
ArchiveReader::ArchiveReader(const void* archiveBuffer, const size_t size, const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveReader(logger)
|
||||
ArchiveReader::ArchiveReader(const void* archiveBuffer, const size_t size, const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
|
||||
: ArchiveReader(logger, archiveType)
|
||||
{
|
||||
OpenMemory(archiveBuffer, size);
|
||||
}
|
||||
@@ -51,7 +51,33 @@ namespace OpenVulkano
|
||||
m_archive = archive_read_new();
|
||||
}
|
||||
ChkErr(archive_read_support_filter_all(m_archive));
|
||||
ChkErr(archive_read_support_format_all(m_archive));
|
||||
std::function<int(archive*)> pFunc;
|
||||
switch (m_archiveType)
|
||||
{
|
||||
case ArchiveType::ZIP:
|
||||
pFunc = archive_read_support_format_zip;
|
||||
break;
|
||||
case ArchiveType::SEVEN_ZIP:
|
||||
pFunc = archive_read_support_format_7zip;
|
||||
break;
|
||||
case ArchiveType::CPIO:
|
||||
pFunc = archive_read_support_format_cpio;
|
||||
break;
|
||||
case ArchiveType::ISO:
|
||||
pFunc = archive_read_support_format_iso9660;
|
||||
case ArchiveType::TAR:
|
||||
pFunc = archive_read_support_format_tar;
|
||||
break;
|
||||
case ArchiveType::WARC:
|
||||
pFunc = archive_read_support_format_warc;
|
||||
break;
|
||||
case ArchiveType::XAR:
|
||||
pFunc = archive_read_support_format_xar;
|
||||
break;
|
||||
default:
|
||||
pFunc = archive_read_support_format_all;
|
||||
}
|
||||
ChkErr(pFunc(m_archive));
|
||||
m_open = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user