MCPcopy Create free account
hub / github.com/comaps/comaps / ZipFileReader

Method ZipFileReader

libs/coding/zip_reader.cpp:43–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41} // namespace
42
43ZipFileReader::ZipFileReader(std::string const & container, std::string const & file, uint32_t logPageSize,
44 uint32_t logPageCount)
45 : FileReader(container, logPageSize, logPageCount)
46 , m_uncompressedFileSize(0)
47{
48 auto zip = unzip::Open(container.c_str());
49 if (!zip)
50 MYTHROW(OpenZipException, ("Can't get zip file handle", container));
51
52 SCOPE_GUARD(zipGuard, std::bind(&unzClose, zip));
53
54 if (unzip::Code::Ok != unzip::GoToFile(zip, file.c_str()))
55 MYTHROW(LocateZipException, ("Can't locate file inside zip", file));
56
57 if (unzip::Code::Ok != unzip::OpenCurrentFile(zip))
58 MYTHROW(LocateZipException, ("Can't open file inside zip", file));
59
60 auto const offset = unzip::GetCurrentFileFilePos(zip);
61 unzip::CloseCurrentFile(zip);
62
63 if (offset == 0 || offset > Size())
64 MYTHROW(LocateZipException, ("Invalid offset inside zip", file));
65
66 unzip::FileInfo fileInfo;
67 if (unzip::Code::Ok != unzip::GetCurrentFileInfo(zip, fileInfo))
68 MYTHROW(LocateZipException, ("Can't get compressed file size inside zip", file));
69
70 SetOffsetAndSize(offset, fileInfo.m_info.compressed_size);
71 m_uncompressedFileSize = fileInfo.m_info.uncompressed_size;
72}
73
74void ZipFileReader::FilesList(std::string const & zipContainer, FileList & filesList)
75{

Callers

nothing calls this directly

Calls 7

OpenFunction · 0.85
GoToFileFunction · 0.85
OpenCurrentFileFunction · 0.85
GetCurrentFileFilePosFunction · 0.85
CloseCurrentFileFunction · 0.85
SizeFunction · 0.85
GetCurrentFileInfoFunction · 0.85

Tested by

no test coverage detected