/* $Id$ */ /* * unzip.h -- IO for uncompress .zip files using zlib Version 0.15 beta, Mar * 19th, 1998, * * Copyright (C) 1998 Gilles Vollant * * This unzip package allow extract file from .ZIP file, compatible with PKZip * 2.04g WinZip, InfoZip tools and compatible. Encryption and multi volume * ZipFile (span) are not supported. Old compressions used by old PKZip 1.x * are not supported * * THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR * STRUCTURE CAN CHANGE IN FUTURE VERSION !! I WAIT FEEDBACK at mail * info@winimage.com Visit also http://www.winimage.com/zLibDll/unzip.htm for * evolution * * Condition of use and distribution are the same than zlib : * * This software is provided 'as-is', without any express or implied warranty. * In no event will the authors be held liable for any damages arising from * the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not claim * that you wrote the original software. If you use this software in a * product, an acknowledgment in the product documentation would be * appreciated but is not required. 2. Altered source versions must be * plainly marked as such, and must not be misrepresented as being the * original software. 3. This notice may not be removed or altered from any * source distribution. * * */ /* * for more info about .ZIP format, see * ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip PkWare has also * a specification at : ftp://ftp.pkware.com/probdesc.zip */ #ifndef _unz_H #define _unz_H #ifdef __cplusplus extern "C" { #endif #ifndef _ZLIB_H #include #endif #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) /* * like the STRICT of WIN32, we define a pointer that cannot be * converted from (void*) without cast */ typedef struct TagunzFile__ { int unused; } unzFile__; typedef unzFile__ *unzFile; #else typedef voidp unzFile; #endif #define UNZ_OK (0) #define UNZ_END_OF_LIST_OF_FILE (-100) #define UNZ_ERRNO (Z_ERRNO) #define UNZ_EOF (0) #define UNZ_PARAMERROR (-102) #define UNZ_BADZIPFILE (-103) #define UNZ_INTERNALERROR (-104) #define UNZ_CRCERROR (-105) /* tm_unz contain date/time info */ typedef struct tm_unz_s { uInt tm_sec; /* seconds after the minute - [0,59] */ uInt tm_min; /* minutes after the hour - [0,59] */ uInt tm_hour;/* hours since midnight - [0,23] */ uInt tm_mday;/* day of the month - [1,31] */ uInt tm_mon; /* months since January - [0,11] */ uInt tm_year;/* years - [1980..2044] */ } tm_unz; /* * unz_global_info structure contain global data about the ZIPfile * These data comes from the end of central dir */ typedef struct unz_global_info_s { uLong number_entry; /* total number of entries in the * central dir on this disk */ uLong size_comment; /* size of the global comment of the * zipfile */ } unz_global_info; /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info_s { uLong version;/* version made by 2 bytes */ uLong version_needed; /* version needed to extract 2 * bytes */ uLong flag; /* general purpose bit flag 2 bytes */ uLong compression_method; /* compression method 2 bytes */ uLong dosDate;/* last mod file date in Dos fmt 4 bytes */ uLong crc; /* crc-32 4 bytes */ uLong compressed_size; /* compressed size 4 bytes */ uLong uncompressed_size; /* uncompressed size 4 bytes */ uLong size_filename; /* filename length 2 * bytes */ uLong size_file_extra; /* extra field length 2 bytes */ uLong size_file_comment; /* file comment length 2 * bytes */ uLong disk_num_start; /* disk number start 2 * bytes */ uLong internal_fa; /* internal file attributes 2 * bytes */ uLong external_fa; /* external file attributes 4 * bytes */ tm_unz tmu_date; } unz_file_info; extern int ZEXPORT unzStringFileNameCompare OF((const char *fileName1, const char *fileName2, int iCaseSensitivity)); /* * Compare two filename (fileName1,fileName2). If iCaseSenisivity = * 1, comparision is case sensitivity (like strcmp) If * iCaseSenisivity = 2, comparision is not case sensitivity (like * strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is * defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern unzFile ZEXPORT unzOpen OF((const char *path)); /* * Open a Zip file. path contain the full pathname (by example, on a * Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer * "zlib/zlib111.zip". If the zipfile cannot be opened (file don't * exist or in not valid), the return value is NULL. Else, the return * value is a unzFile Handle, usable with other function of this * unzip package. */ extern int ZEXPORT unzClose OF((unzFile file)); /* * Close a ZipFile opened with unzipOpen. If there is files inside * the .Zip opened with unzOpenCurrentFile (see later), these files * MUST be closed with unzipCloseCurrentFile before call unzipClose. * return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, unz_global_info * pglobal_info)); /* * Write info about the ZipFile in the *pglobal_info structure. No * preparation of the structure is needed return UNZ_OK if there is * no problem. */ extern int ZEXPORT unzGetGlobalComment OF((unzFile file, char *szComment, uLong uSizeBuf)); /* * Get the global comment string of the ZipFile, in the szComment * buffer. uSizeBuf is the size of the szComment buffer. return the * number of byte copied or an error code <0 */ /***************************************************************************/ /* Unzip package allow you browse the directory of the zipfile */ extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); /* * Set the current file of the zipfile to the first file. return * UNZ_OK if there is no problem */ extern int ZEXPORT unzGoToNextFile OF((unzFile file)); /* * Set the current file of the zipfile to the next file. return * UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if * the actual file was the latest. */ extern int ZEXPORT unzLocateFile OF((unzFile file, const char *szFileName, int iCaseSensitivity)); /* * Try locate the file szFileName in the zipfile. For the * iCaseSensitivity signification, see unzStringFileNameCompare * * return value : UNZ_OK if the file is found. It becomes the current * file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, unz_file_info * pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)); /* * Get Info about the current file if pfile_info!=NULL, the * *pfile_info structure will contain somes info about the current * file if szFileName!=NULL, the filemane string will be copied in * szFileName (fileNameBufferSize is the size of the buffer) if * extraField!=NULL, the extra field information will be copied in * extraField (extraFieldBufferSize is the size of the buffer). This * is the Central-header version of the extra field if * szComment!=NULL, the comment string of the file will be copied in * szComment (commentBufferSize is the size of the buffer) */ /***************************************************************************/ /* * for reading the content of the current zipfile, you can open it, * read data from it, and close it (you can close it before reading * all the file) */ extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); /* * Open for reading data the current file in the zipfile. If there is * no error, the return value is UNZ_OK. */ extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); /* * Close the file in zip opened with unzOpenCurrentFile Return * UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT unzReadCurrentFile OF((unzFile file, voidp buf, unsigned len)); /* * Read bytes from the current file (opened by unzOpenCurrentFile) * buf contain buffer where data must be copied len the size of buf. * * return the number of byte copied if somes bytes are copied return 0 * if the end of file was reached return <0 with error code if there * is an error (UNZ_ERRNO for IO error, or zLib error for uncompress * error) */ extern z_off_t ZEXPORT unztell OF((unzFile file)); /* * Give the current position in uncompressed data */ extern int ZEXPORT unzeof OF((unzFile file)); /* * return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, voidp buf, unsigned len)); /* * Read extra field from the current file (opened by * unzOpenCurrentFile) This is the local-header version of the extra * field (sometimes, there is more info in the local-header version * than in the central-header) * * if buf==NULL, it return the size of the local extra field * * if buf!=NULL, len is the size of the buffer, the extra header is * copied in buf. the return value is the number of bytes copied in * buf, or (if <0) the error code */ #ifdef __cplusplus } #endif #endif /* _unz_H */