38 #define NCBI_USE_ERRCODE_X Util_Compress
47 #define MINIZ_NO_ZLIB_APIS
50 #if defined(NCBI_OS_BSD) || defined(NCBI_OS_CYGWIN)
51 # define fopen64 fopen
52 # define ftello64 ftello
53 # define fseeko64 fseeko
55 # define freopen64 freopen
56 # define _LARGEFILE64_SOURCE
65 #include "miniz_old/miniz.c"
66 #include "miniz_old/miniz_zip.c"
67 #include "miniz_old/miniz_tdef.c"
68 #include "miniz_old/miniz_tinfl.c"
84 memset(&
zip, 0,
sizeof(
zip));
91 #define ZIP_HANDLE &(m_Handle->zip)
92 #define ZIP_CHECK _ASSERT(m_Handle != NULL)
95 _ASSERT(m_Handle == NULL); \
96 m_Handle = new SZipHandle(); \
97 _ASSERT(m_Handle != NULL); \
102 _ASSERT(m_Handle != NULL); \
108 #define ZIP_THROW(errcode, message) \
109 NCBI_THROW(CArchiveException, errcode, message)
138 ZIP_THROW(eCreate,
"Cannot create archive file '" + filename +
"'");
152 ZIP_THROW(eCreate,
"Cannot create archive file from a FILE* stream");
166 ZIP_THROW(eCreate,
"Cannot create archive in memory");
180 ZIP_THROW(eOpen,
"Cannot open archive file '" + filename +
"'");
194 ZIP_THROW(eOpen,
"Cannot open archive from a FILE* stream");
208 ZIP_THROW(eOpen,
"Cannot open archive in memory");
263 ZIP_THROW(eClose,
"Error closing archive");
293 ZIP_THROW(eList,
"Cannot get entry information by index " +
297 info->m_Index = index;
333 info->m_Stat.st_mode = 0;
371 const string& dst_path)
378 if (!
CDir(dst_path).CreatePath()) {
379 ZIP_THROW(eExtract,
"Cannot create directory '" + dst_path +
"'");
387 ZIP_THROW(eExtract,
"Cannot create target file '" + dst_path +
"'");
392 ZIP_THROW(eExtract,
"Error close file '" + dst_path +
"'");
395 ZIP_THROW(eExtract,
"Error extracting entry with index '" +
417 ZIP_THROW(eExtract,
"Error extracting entry with index " +
460 ZIP_THROW(eExtract,
"Error extracting entry with index " +
471 const void* ,
size_t n)
492 ZIP_THROW(eExtract,
"Test entry with index " +
500 const string& src_path,
ELevel level)
505 const string& comment =
info.m_Comment;
511 comment.c_str(), comment_size, (
mz_uint)level, 0, 0);
516 info.GetName().c_str(), src_path.c_str(),
517 comment.c_str(), comment_size, (
mz_uint)level);
520 ZIP_THROW(eAppend,
"Error appending entry '" + src_path +
"' to archive");
532 const string& comment =
info.m_Comment;
538 ZIP_THROW(eAppend,
"Error appending entry with name '" +
539 info.GetName() +
"' from memory to archive");
#define ZIP_THROW(errcode, message)
static size_t s_ZipExtractCallback(void *params, mz_uint64, const void *buf, size_t n)
static size_t s_ZipTestCallback(void *, mz_uint64, const void *, size_t n)
virtual void CreateFile(const string &filename)
Create new archive file.
virtual void Close(void)
Close the archive.
virtual void ExtractEntryToMemory(const CArchiveEntryInfo &info, void *buf, size_t size)
Extracts an archive file to a memory buffer.
ELocation m_Location
Archive location (file/memory)
SZipHandle * m_Handle
Archive handle.
virtual void FinalizeMemory(void **buf, size_t *size)
Finalize the archive created in memory.
virtual void CreateFileStream(FILE *filestream)
Create new archive file on top of a FILE stream.
virtual void ExtractEntryToCallback(const CArchiveEntryInfo &info, Callback_Write callback)
Extracts an archive file using user-defined callback to process extracted data.
virtual void AddEntryFromMemory(const CArchiveEntryInfo &info, void *buf, size_t size, ELevel level)
Add entry to newly created archive from memory buffer.
virtual void OpenFileStream(FILE *filestream, Uint8 archive_size=0)
Open archive from a FILE stream, beginning at the current file position.
EDirection m_Mode
Processing direction (read/write)
virtual void CreateMemory(size_t initial_allocation_size=0)
Create new archive located in memory.
size_t(* Callback_Write)(const CArchiveEntryInfo &info, const void *buf, size_t n)
Type of user-defined callback for extraction from archive.
CCompression::ELevel ELevel
virtual void OpenFile(const string &filename)
Open archive file for reading.
virtual bool HaveSupport_Type(CDirEntry::EType type)
Check that current archive format have support for specific feature.
virtual void ExtractEntryToFileSystem(const CArchiveEntryInfo &info, const string &dst_path)
Extracts an archive entry to file system.
virtual void AddEntryFromFileSystem(const CArchiveEntryInfo &info, const string &src_path, ELevel level)
Add single entry to newly created archive from file system.
virtual void GetEntryInfo(size_t index, CArchiveEntryInfo *info)
Get detailed information about an archive entry by index.
#define COMPRESS_HANDLE_EXCEPTIONS(subcode, message)
Macro to catch and handle exceptions (from streams in the destructor)
virtual ~CArchiveZip(void)
Destructor.
virtual size_t GetNumEntries(void)
Returns the total number of entries in the archive.
virtual void TestEntry(const CArchiveEntryInfo &info)
Verify entry integrity.
virtual void OpenMemory(const void *buf, size_t size)
Open archive located in memory for reading.
@ eFileStream
File stream based archive (FILE*)
@ eFile
File-based archive.
@ eMemory
Memory-based archive.
@ eRead
Reading from archive.
@ eWrite
Writing into archive.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
EType
Directory entry type.
EType GetType(EFollowLinks follow=eIgnoreLinks) const
Get a type of a directory entry.
@ eSocket
Socket (UNIX only)
@ eBlockSpecial
Block special (UNIX only)
@ eLink
Symbolic link (UNIX only)
@ eCharSpecial
Character special.
uint64_t Uint8
8-byte (64-bit) unsigned integer
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static string SizetToString(size_t value, TNumToStringFlags flags=0, int base=10)
Convert size_t to string.
Definition of all error codes used in util (xutil.lib).
mz_bool mz_zip_reader_end(mz_zip_archive *pZip)
mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip)
mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip)
mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning)
mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags)
mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index)
mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32)
mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size)
mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags)
mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags)
mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, FILE *pFile, mz_uint flags)
static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, const void *pBuf, size_t n)
mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, FILE *pFile, mz_uint64 archive_size, mz_uint flags)
mz_bool mz_zip_writer_end(mz_zip_archive *pZip)
mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags)
mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags)
mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat)
mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize)
const struct ncbi::grid::netcache::search::fields::SIZE size
IArchive::Callback_Write callback
const CArchiveEntryInfo * info
ZIP archive handle type definition.
mz_uint32 m_external_attr
mz_uint16 m_version_made_by
char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]
char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]