]> git.lizzy.rs Git - zlib.git/blobdiff - contrib/minizip/unzip.h
zlib 1.2.3.9
[zlib.git] / contrib / minizip / unzip.h
index 48e6832067850c887e4e89f8c5662e7bdceb6636..3183968b771e3c261fdcc7a0f50bd743faf531e3 100644 (file)
-/* unzip.h -- IO for uncompress .zip files using zlib\r
-   Version 0.22, May 19th, 2003\r
-\r
-   Copyright (C) 1998-2003 Gilles Vollant\r
-\r
-   This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g\r
-     WinZip, InfoZip tools and compatible.\r
-   Encryption and multi volume ZipFile (span) are not supported.\r
-   Old compressions used by old PKZip 1.x are not supported\r
-\r
-\r
-   I WAIT FEEDBACK at mail info@winimage.com\r
-   Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution\r
-\r
-   Condition of use and distribution are the same than zlib :\r
-\r
-  This software is provided 'as-is', without any express or implied\r
-  warranty.  In no event will the authors be held liable for any damages\r
-  arising from the use of this software.\r
-\r
-  Permission is granted to anyone to use this software for any purpose,\r
-  including commercial applications, and to alter it and redistribute it\r
-  freely, subject to the following restrictions:\r
-\r
-  1. The origin of this software must not be misrepresented; you must not\r
-     claim that you wrote the original software. If you use this software\r
-     in a product, an acknowledgment in the product documentation would be\r
-     appreciated but is not required.\r
-  2. Altered source versions must be plainly marked as such, and must not be\r
-     misrepresented as being the original software.\r
-  3. This notice may not be removed or altered from any source distribution.\r
-\r
-\r
-*/\r
-\r
-/* for more info about .ZIP format, see\r
-      http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip\r
-      http://www.info-zip.org/pub/infozip/doc/\r
-   PkWare has also a specification at :\r
-      ftp://ftp.pkware.com/probdesc.zip\r
-*/\r
-\r
-#ifndef _unz_H\r
-#define _unz_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#ifndef _ZLIB_H\r
-#include "zlib.h"\r
-#endif\r
-\r
-#ifndef _ZLIBIOAPI_H\r
-#include "ioapi.h"\r
-#endif\r
-\r
-#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)\r
-/* like the STRICT of WIN32, we define a pointer that cannot be converted\r
-    from (void*) without cast */\r
-typedef struct TagunzFile__ { int unused; } unzFile__;\r
-typedef unzFile__ *unzFile;\r
-#else\r
-typedef voidp unzFile;\r
-#endif\r
-\r
-\r
-#define UNZ_OK                          (0)\r
-#define UNZ_END_OF_LIST_OF_FILE         (-100)\r
-#define UNZ_ERRNO                       (Z_ERRNO)\r
-#define UNZ_EOF                         (0)\r
-#define UNZ_PARAMERROR                  (-102)\r
-#define UNZ_BADZIPFILE                  (-103)\r
-#define UNZ_INTERNALERROR               (-104)\r
-#define UNZ_CRCERROR                    (-105)\r
-\r
-/* tm_unz contain date/time info */\r
-typedef struct tm_unz_s\r
-{\r
-    uInt tm_sec;            /* seconds after the minute - [0,59] */\r
-    uInt tm_min;            /* minutes after the hour - [0,59] */\r
-    uInt tm_hour;           /* hours since midnight - [0,23] */\r
-    uInt tm_mday;           /* day of the month - [1,31] */\r
-    uInt tm_mon;            /* months since January - [0,11] */\r
-    uInt tm_year;           /* years - [1980..2044] */\r
-} tm_unz;\r
-\r
-/* unz_global_info structure contain global data about the ZIPfile\r
-   These data comes from the end of central dir */\r
-typedef struct unz_global_info_s\r
-{\r
-    uLong number_entry;         /* total number of entries in\r
-                       the central dir on this disk */\r
-    uLong size_comment;         /* size of the global comment of the zipfile */\r
-} unz_global_info;\r
-\r
-\r
-/* unz_file_info contain information about a file in the zipfile */\r
-typedef struct unz_file_info_s\r
-{\r
-    uLong version;              /* version made by                 2 bytes */\r
-    uLong version_needed;       /* version needed to extract       2 bytes */\r
-    uLong flag;                 /* general purpose bit flag        2 bytes */\r
-    uLong compression_method;   /* compression method              2 bytes */\r
-    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */\r
-    uLong crc;                  /* crc-32                          4 bytes */\r
-    uLong compressed_size;      /* compressed size                 4 bytes */\r
-    uLong uncompressed_size;    /* uncompressed size               4 bytes */\r
-    uLong size_filename;        /* filename length                 2 bytes */\r
-    uLong size_file_extra;      /* extra field length              2 bytes */\r
-    uLong size_file_comment;    /* file comment length             2 bytes */\r
-\r
-    uLong disk_num_start;       /* disk number start               2 bytes */\r
-    uLong internal_fa;          /* internal file attributes        2 bytes */\r
-    uLong external_fa;          /* external file attributes        4 bytes */\r
-\r
-    tm_unz tmu_date;\r
-} unz_file_info;\r
-\r
-extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,\r
-                                                 const char* fileName2,\r
-                                                 int iCaseSensitivity));\r
-/*\r
-   Compare two filename (fileName1,fileName2).\r
-   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)\r
-   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi\r
-                                or strcasecmp)\r
-   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system\r
-    (like 1 on Unix, 2 on Windows)\r
-*/\r
-\r
-\r
-extern unzFile ZEXPORT unzOpen OF((const char *path));\r
-/*\r
-  Open a Zip file. path contain the full pathname (by example,\r
-     on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer\r
-     "zlib/zlib113.zip".\r
-     If the zipfile cannot be opened (file don't exist or in not valid), the\r
-       return value is NULL.\r
-     Else, the return value is a unzFile Handle, usable with other function\r
-       of this unzip package.\r
-*/\r
-\r
-extern unzFile ZEXPORT unzOpen2 OF((const char *path,\r
-                                    zlib_filefunc_def* pzlib_filefunc_def));\r
-/*\r
-   Open a Zip file, like unzOpen, but provide a set of file low level API\r
-      for read/write the zip file (see ioapi.h)\r
-*/\r
-\r
-extern int ZEXPORT unzClose OF((unzFile file));\r
-/*\r
-  Close a ZipFile opened with unzipOpen.\r
-  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),\r
-    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.\r
-  return UNZ_OK if there is no problem. */\r
-\r
-extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,\r
-                                        unz_global_info *pglobal_info));\r
-/*\r
-  Write info about the ZipFile in the *pglobal_info structure.\r
-  No preparation of the structure is needed\r
-  return UNZ_OK if there is no problem. */\r
-\r
-\r
-extern int ZEXPORT unzGetGlobalComment OF((unzFile file,\r
-                                           char *szComment,\r
-                                           uLong uSizeBuf));\r
-/*\r
-  Get the global comment string of the ZipFile, in the szComment buffer.\r
-  uSizeBuf is the size of the szComment buffer.\r
-  return the number of byte copied or an error code <0\r
-*/\r
-\r
-\r
-/***************************************************************************/\r
-/* Unzip package allow you browse the directory of the zipfile */\r
-\r
-extern int ZEXPORT unzGoToFirstFile OF((unzFile file));\r
-/*\r
-  Set the current file of the zipfile to the first file.\r
-  return UNZ_OK if there is no problem\r
-*/\r
-\r
-extern int ZEXPORT unzGoToNextFile OF((unzFile file));\r
-/*\r
-  Set the current file of the zipfile to the next file.\r
-  return UNZ_OK if there is no problem\r
-  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.\r
-*/\r
-\r
-extern int ZEXPORT unzLocateFile OF((unzFile file,\r
-                     const char *szFileName,\r
-                     int iCaseSensitivity));\r
-/*\r
-  Try locate the file szFileName in the zipfile.\r
-  For the iCaseSensitivity signification, see unzStringFileNameCompare\r
-\r
-  return value :\r
-  UNZ_OK if the file is found. It becomes the current file.\r
-  UNZ_END_OF_LIST_OF_FILE if the file is not found\r
-*/\r
-\r
-\r
-/* ****************************************** */\r
-/* Ryan supplied functions */\r
-/* unz_file_info contain information about a file in the zipfile */\r
-typedef struct unz_file_pos_s\r
-{\r
-    uLong pos_in_zip_directory;   /* offset in zip file directory */\r
-    uLong num_of_file;            /* # of file */\r
-} unz_file_pos;\r
-\r
-extern int ZEXPORT unzGetFilePos(\r
-    unzFile file,\r
-    unz_file_pos* file_pos);\r
-\r
-extern int ZEXPORT unzGoToFilePos(\r
-    unzFile file,\r
-    unz_file_pos* file_pos);\r
-\r
-/* ****************************************** */\r
-\r
-extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,\r
-                         unz_file_info *pfile_info,\r
-                         char *szFileName,\r
-                         uLong fileNameBufferSize,\r
-                         void *extraField,\r
-                         uLong extraFieldBufferSize,\r
-                         char *szComment,\r
-                         uLong commentBufferSize));\r
-/*\r
-  Get Info about the current file\r
-  if pfile_info!=NULL, the *pfile_info structure will contain somes info about\r
-        the current file\r
-  if szFileName!=NULL, the filemane string will be copied in szFileName\r
-            (fileNameBufferSize is the size of the buffer)\r
-  if extraField!=NULL, the extra field information will be copied in extraField\r
-            (extraFieldBufferSize is the size of the buffer).\r
-            This is the Central-header version of the extra field\r
-  if szComment!=NULL, the comment string of the file will be copied in szComment\r
-            (commentBufferSize is the size of the buffer)\r
-*/\r
-\r
-/***************************************************************************/\r
-/* for reading the content of the current zipfile, you can open it, read data\r
-   from it, and close it (you can close it before reading all the file)\r
-   */\r
-\r
-extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));\r
-/*\r
-  Open for reading data the current file in the zipfile.\r
-  If there is no error, the return value is UNZ_OK.\r
-*/\r
-\r
-extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,\r
-                                                  const char* password));\r
-/*\r
-  Open for reading data the current file in the zipfile.\r
-  password is a crypting password\r
-  If there is no error, the return value is UNZ_OK.\r
-*/\r
-\r
-extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,\r
-                                           int* method,\r
-                                           int* level,\r
-                                           int raw));\r
-/*\r
-  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)\r
-    if raw==1\r
-  *method will receive method of compression, *level will receive level of\r
-     compression\r
-  note : you can set level parameter as NULL (if you did not want known level,\r
-         but you CANNOT set method parameter as NULL\r
-*/\r
-\r
-extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,\r
-                                           int* method,\r
-                                           int* level,\r
-                                           int raw,\r
-                                           const char* password));\r
-/*\r
-  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)\r
-    if raw==1\r
-  *method will receive method of compression, *level will receive level of\r
-     compression\r
-  note : you can set level parameter as NULL (if you did not want known level,\r
-         but you CANNOT set method parameter as NULL\r
-*/\r
-\r
-\r
-extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));\r
-/*\r
-  Close the file in zip opened with unzOpenCurrentFile\r
-  Return UNZ_CRCERROR if all the file was read but the CRC is not good\r
-*/\r
-\r
-extern int ZEXPORT unzReadCurrentFile OF((unzFile file,\r
-                      voidp buf,\r
-                      unsigned len));\r
-/*\r
-  Read bytes from the current file (opened by unzOpenCurrentFile)\r
-  buf contain buffer where data must be copied\r
-  len the size of buf.\r
-\r
-  return the number of byte copied if somes bytes are copied\r
-  return 0 if the end of file was reached\r
-  return <0 with error code if there is an error\r
-    (UNZ_ERRNO for IO error, or zLib error for uncompress error)\r
-*/\r
-\r
-extern z_off_t ZEXPORT unztell OF((unzFile file));\r
-/*\r
-  Give the current position in uncompressed data\r
-*/\r
-\r
-extern int ZEXPORT unzeof OF((unzFile file));\r
-/*\r
-  return 1 if the end of file was reached, 0 elsewhere\r
-*/\r
-\r
-extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,\r
-                                             voidp buf,\r
-                                             unsigned len));\r
-/*\r
-  Read extra field from the current file (opened by unzOpenCurrentFile)\r
-  This is the local-header version of the extra field (sometimes, there is\r
-    more info in the local-header version than in the central-header)\r
-\r
-  if buf==NULL, it return the size of the local extra field\r
-\r
-  if buf!=NULL, len is the size of the buffer, the extra header is copied in\r
-    buf.\r
-  the return value is the number of bytes copied in buf, or (if <0)\r
-    the error code\r
-*/\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* _unz_H */\r
+/* unzip.h -- IO for uncompress .zip files using zlib
+   Version 1.1, February 14h, 2010
+   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+         Modifications of Unzip for Zip64
+         Copyright (C) 2007-2008 Even Rouault
+
+         Modifications for Zip64 support on both zip and unzip
+         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+         For more info read MiniZip_info.txt
+
+         ---------------------------------------------------------------------------------
+
+        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.
+
+  ---------------------------------------------------------------------------------
+
+        Changes
+
+        See header of unzip64.c
+
+*/
+
+#ifndef _unz64_H
+#define _unz64_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef  _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#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_info64_s
+{
+    ZPOS64_T 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_info64;
+
+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_info64_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 */
+    ZPOS64_T compressed_size;   /* compressed size                 8 bytes */
+    ZPOS64_T uncompressed_size; /* uncompressed size               8 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_info64;
+
+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));
+extern unzFile ZEXPORT unzOpen64 OF((const void *path));
+/*
+  Open a Zip file. path contain the full pathname (by example,
+     on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
+     "zlib/zlib113.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.
+     the "64" function take a const void* pointer, because the path is just the
+       value passed to the open64_file_func callback.
+     Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
+       is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
+       does not describe the reality
+*/
+
+
+extern unzFile ZEXPORT unzOpen2 OF((const char *path,
+                                    zlib_filefunc_def* pzlib_filefunc_def));
+/*
+   Open a Zip file, like unzOpen, but provide a set of file low level API
+      for read/write the zip file (see ioapi.h)
+*/
+
+extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
+                                    zlib_filefunc64_def* pzlib_filefunc_def));
+/*
+   Open a Zip file, like unz64Open, but provide a set of file low level API
+      for read/write the zip file (see ioapi.h)
+*/
+
+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));
+
+extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
+                                        unz_global_info64 *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
+*/
+
+
+/* ****************************************** */
+/* Ryan supplied functions */
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_pos_s
+{
+    uLong pos_in_zip_directory;   /* offset in zip file directory */
+    uLong num_of_file;            /* # of file */
+} unz_file_pos;
+
+extern int ZEXPORT unzGetFilePos(
+    unzFile file,
+    unz_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos(
+    unzFile file,
+    unz_file_pos* file_pos);
+
+typedef struct unz64_file_pos_s
+{
+    ZPOS64_T pos_in_zip_directory;   /* offset in zip file directory */
+    ZPOS64_T num_of_file;            /* # of file */
+} unz64_file_pos;
+
+extern int ZEXPORT unzGetFilePos64(
+    unzFile file,
+    unz64_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos64(
+    unzFile file,
+    const unz64_file_pos* file_pos);
+
+/* ****************************************** */
+
+extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
+                         unz_file_info64 *pfile_info,
+                         char *szFileName,
+                         uLong fileNameBufferSize,
+                         void *extraField,
+                         uLong extraFieldBufferSize,
+                         char *szComment,
+                         uLong commentBufferSize));
+
+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)
+*/
+
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
+
+/** Addition for GDAL : END */
+
+
+/***************************************************************************/
+/* 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 unzOpenCurrentFilePassword OF((unzFile file,
+                                                  const char* password));
+/*
+  Open for reading data the current file in the zipfile.
+  password is a crypting password
+  If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
+                                           int* method,
+                                           int* level,
+                                           int raw));
+/*
+  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+    if raw==1
+  *method will receive method of compression, *level will receive level of
+     compression
+  note : you can set level parameter as NULL (if you did not want known level,
+         but you CANNOT set method parameter as NULL
+*/
+
+extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
+                                           int* method,
+                                           int* level,
+                                           int raw,
+                                           const char* password));
+/*
+  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+    if raw==1
+  *method will receive method of compression, *level will receive level of
+     compression
+  note : you can set level parameter as NULL (if you did not want known level,
+         but you CANNOT set method parameter as NULL
+*/
+
+
+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));
+
+extern ZPOS64_T ZEXPORT unztell64 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
+*/
+
+/***************************************************************************/
+
+/* Get the current file offset */
+extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);
+extern uLong ZEXPORT unzGetOffset (unzFile file);
+
+/* Set the current file offset */
+extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _unz64_H */