mirror of
				https://github.com/eledio-devices/thirdparty-miniz.git
				synced 2025-10-31 00:32:38 +01:00 
			
		
		
		
	Separate the into multiple files similar to the vogl zip64 version of the library.
If anyone wants to have a minified version of if a script could be written to do this automatically.
This commit is contained in:
		
							
								
								
									
										191
									
								
								miniz_zip.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								miniz_zip.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | ||||
|  | ||||
| #pragma once | ||||
| #include "miniz.h" | ||||
|  | ||||
| // ------------------- ZIP archive reading/writing | ||||
| enum | ||||
| { | ||||
|   MZ_ZIP_MAX_IO_BUF_SIZE = 64*1024, | ||||
|   MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 260, | ||||
|   MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 256 | ||||
| }; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   mz_uint32 m_file_index; | ||||
|   mz_uint32 m_central_dir_ofs; | ||||
|   mz_uint16 m_version_made_by; | ||||
|   mz_uint16 m_version_needed; | ||||
|   mz_uint16 m_bit_flag; | ||||
|   mz_uint16 m_method; | ||||
| #ifndef MINIZ_NO_TIME | ||||
|   time_t m_time; | ||||
| #endif | ||||
|   mz_uint32 m_crc32; | ||||
|   mz_uint64 m_comp_size; | ||||
|   mz_uint64 m_uncomp_size; | ||||
|   mz_uint16 m_internal_attr; | ||||
|   mz_uint32 m_external_attr; | ||||
|   mz_uint64 m_local_header_ofs; | ||||
|   mz_uint32 m_comment_size; | ||||
|   char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; | ||||
|   char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; | ||||
| } mz_zip_archive_file_stat; | ||||
|  | ||||
| typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n); | ||||
| typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n); | ||||
|  | ||||
| struct mz_zip_internal_state_tag; | ||||
| typedef struct mz_zip_internal_state_tag mz_zip_internal_state; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|   MZ_ZIP_MODE_INVALID = 0, | ||||
|   MZ_ZIP_MODE_READING = 1, | ||||
|   MZ_ZIP_MODE_WRITING = 2, | ||||
|   MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 | ||||
| } mz_zip_mode; | ||||
|  | ||||
| typedef struct mz_zip_archive_tag | ||||
| { | ||||
|   mz_uint64 m_archive_size; | ||||
|   mz_uint64 m_central_directory_file_ofs; | ||||
|   mz_uint m_total_files; | ||||
|   mz_zip_mode m_zip_mode; | ||||
|  | ||||
|   mz_uint m_file_offset_alignment; | ||||
|  | ||||
|   mz_alloc_func m_pAlloc; | ||||
|   mz_free_func m_pFree; | ||||
|   mz_realloc_func m_pRealloc; | ||||
|   void *m_pAlloc_opaque; | ||||
|  | ||||
|   mz_file_read_func m_pRead; | ||||
|   mz_file_write_func m_pWrite; | ||||
|   void *m_pIO_opaque; | ||||
|  | ||||
|   mz_zip_internal_state *m_pState; | ||||
|  | ||||
| } mz_zip_archive; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|   MZ_ZIP_FLAG_CASE_SENSITIVE                = 0x0100, | ||||
|   MZ_ZIP_FLAG_IGNORE_PATH                   = 0x0200, | ||||
|   MZ_ZIP_FLAG_COMPRESSED_DATA               = 0x0400, | ||||
|   MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800 | ||||
| } mz_zip_flags; | ||||
|  | ||||
| // ZIP archive reading | ||||
|  | ||||
| // Inits a ZIP archive reader. | ||||
| // These functions read and validate the archive's central directory. | ||||
| mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint32 flags); | ||||
| mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint32 flags); | ||||
|  | ||||
| #ifndef MINIZ_NO_STDIO | ||||
| mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags); | ||||
| #endif | ||||
|  | ||||
| // Returns the total number of files in the archive. | ||||
| mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); | ||||
|  | ||||
| // Returns detailed information about an archive file entry. | ||||
| mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); | ||||
|  | ||||
| // Determines if an archive file entry is a directory entry. | ||||
| mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index); | ||||
| mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index); | ||||
|  | ||||
| // Retrieves the filename of an archive file entry. | ||||
| // Returns the number of bytes written to pFilename, or if filename_buf_size is 0 this function returns the number of bytes needed to fully store the filename. | ||||
| mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size); | ||||
|  | ||||
| // Attempts to locates a file in the archive's central directory. | ||||
| // Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH | ||||
| // Returns -1 if the file cannot be found. | ||||
| int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); | ||||
|  | ||||
| // Extracts a archive file to a memory buffer using no memory allocation. | ||||
| mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); | ||||
| mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); | ||||
|  | ||||
| // Extracts a archive file to a memory buffer. | ||||
| 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_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags); | ||||
|  | ||||
| // Extracts a archive file to a dynamically allocated heap buffer. | ||||
| void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags); | ||||
| void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags); | ||||
|  | ||||
| // Extracts a archive file using a callback function to output the file's data. | ||||
| 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_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); | ||||
|  | ||||
| #ifndef MINIZ_NO_STDIO | ||||
| // Extracts a archive file to a disk file and sets its last accessed and modified times. | ||||
| // This function only extracts files, not archive directory records. | ||||
| mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); | ||||
| mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); | ||||
| #endif | ||||
|  | ||||
| // Ends archive reading, freeing all allocations, and closing the input archive file if mz_zip_reader_init_file() was used. | ||||
| mz_bool mz_zip_reader_end(mz_zip_archive *pZip); | ||||
|  | ||||
| // ZIP archive writing | ||||
|  | ||||
| #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS | ||||
|  | ||||
| // Inits a ZIP archive writer. | ||||
| mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); | ||||
| mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size); | ||||
|  | ||||
| #ifndef MINIZ_NO_STDIO | ||||
| mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning); | ||||
| #endif | ||||
|  | ||||
| // Converts a ZIP archive reader object into a writer object, to allow efficient in-place file appends to occur on an existing archive. | ||||
| // For archives opened using mz_zip_reader_init_file, pFilename must be the archive's filename so it can be reopened for writing. If the file can't be reopened, mz_zip_reader_end() will be called. | ||||
| // For archives opened using mz_zip_reader_init_mem, the memory block must be growable using the realloc callback (which defaults to realloc unless you've overridden it). | ||||
| // Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's user provided m_pWrite function cannot be NULL. | ||||
| // Note: In-place archive modification is not recommended unless you know what you're doing, because if execution stops or something goes wrong before | ||||
| // the archive is finalized the file's central directory will be hosed. | ||||
| mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename); | ||||
|  | ||||
| // Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive. | ||||
| // To add a directory entry, call this method with an archive name ending in a forwardslash with empty buffer. | ||||
| // level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. | ||||
| mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags); | ||||
| 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); | ||||
|  | ||||
| #ifndef MINIZ_NO_STDIO | ||||
| // Adds the contents of a disk file to an archive. This function also records the disk file's modified time into the archive. | ||||
| // level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. | ||||
| 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); | ||||
| #endif | ||||
|  | ||||
| // Adds a file to an archive by fully cloning the data from another archive. | ||||
| // This function fully clones the source file's compressed data (no recompression), along with its full filename, extra data, and comment fields. | ||||
| mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint file_index); | ||||
|  | ||||
| // Finalizes the archive by writing the central directory records followed by the end of central directory record. | ||||
| // After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end(). | ||||
| // An archive must be manually finalized by calling this function for it to be valid. | ||||
| mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); | ||||
| mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, size_t *pSize); | ||||
|  | ||||
| // Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used. | ||||
| // Note for the archive to be valid, it must have been finalized before ending. | ||||
| mz_bool mz_zip_writer_end(mz_zip_archive *pZip); | ||||
|  | ||||
| // Misc. high-level helper functions: | ||||
|  | ||||
| // mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) appends a memory blob to a ZIP archive. | ||||
| // level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. | ||||
| mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); | ||||
|  | ||||
| // Reads a single file from an archive into a heap block. | ||||
| // Returns NULL on failure. | ||||
| void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint zip_flags); | ||||
|  | ||||
| #endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS | ||||
		Reference in New Issue
	
	Block a user