root/ext/zip/lib/zip.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef _HAD_ZIP_H
   2 #define _HAD_ZIP_H
   3 
   4 /*
   5   zip.h -- exported declarations.
   6   Copyright (C) 1999-2012 Dieter Baron and Thomas Klausner
   7 
   8   This file is part of libzip, a library to manipulate ZIP archives.
   9   The authors can be contacted at <libzip@nih.at>
  10 
  11   Redistribution and use in source and binary forms, with or without
  12   modification, are permitted provided that the following conditions
  13   are met:
  14   1. Redistributions of source code must retain the above copyright
  15      notice, this list of conditions and the following disclaimer.
  16   2. Redistributions in binary form must reproduce the above copyright
  17      notice, this list of conditions and the following disclaimer in
  18      the documentation and/or other materials provided with the
  19      distribution.
  20   3. The names of the authors may not be used to endorse or promote
  21      products derived from this software without specific prior
  22      written permission.
  23  
  24   THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
  25   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  26   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
  28   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  30   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
  32   IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  33   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  34   IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  35 */
  36 
  37 
  38 
  39 #include "main/php.h"
  40  
  41 #ifdef PHP_WIN32
  42 #ifdef PHP_ZIP_EXPORTS
  43 #  define ZIP_EXTERN __declspec(dllexport) _stdcall
  44 # else
  45 #  define ZIP_EXTERN
  46 # endif
  47 #elif defined(__GNUC__) && __GNUC__ >= 4
  48 # define ZIP_EXTERN __attribute__ ((visibility("default")))
  49 #else
  50 # define ZIP_EXTERN
  51 #endif
  52  
  53 
  54 
  55 #ifdef __cplusplus
  56 extern "C" {
  57 #endif
  58 
  59 #include <zipconf.h>
  60 
  61 #include <sys/types.h>
  62 #include <stdio.h>
  63 #include <time.h>
  64 
  65 /* flags for zip_open */
  66 
  67 #define ZIP_CREATE           1
  68 #define ZIP_EXCL             2
  69 #define ZIP_CHECKCONS        4
  70 #define ZIP_TRUNCATE         8
  71 
  72 
  73 /* flags for zip_name_locate, zip_fopen, zip_stat, ... */
  74 
  75 #define ZIP_FL_NOCASE           1u /* ignore case on name lookup */
  76 #define ZIP_FL_NODIR            2u /* ignore directory component */
  77 #define ZIP_FL_COMPRESSED       4u /* read compressed data */
  78 #define ZIP_FL_UNCHANGED        8u /* use original data, ignoring changes */
  79 #define ZIP_FL_RECOMPRESS      16u /* force recompression of data */
  80 #define ZIP_FL_ENCRYPTED       32u /* read encrypted data (implies ZIP_FL_COMPRESSED) */
  81 #define ZIP_FL_ENC_GUESS        0u /* guess string encoding (is default) */
  82 #define ZIP_FL_ENC_RAW         64u /* get unmodified string */
  83 #define ZIP_FL_ENC_STRICT     128u /* follow specification strictly */
  84 #define ZIP_FL_LOCAL          256u /* in local header */
  85 #define ZIP_FL_CENTRAL        512u /* in central directory */
  86 /*                           1024u    reserved for internal use */
  87 #define ZIP_FL_ENC_UTF_8     2048u /* string is UTF-8 encoded */
  88 #define ZIP_FL_ENC_CP437     4096u /* string is CP437 encoded */
  89 #define ZIP_FL_OVERWRITE     8192u /* zip_file_add: if file with name exists, overwrite (replace) it */
  90 
  91 /* archive global flags flags */
  92 
  93 #define ZIP_AFL_TORRENT         1u /* torrent zipped */
  94 #define ZIP_AFL_RDONLY          2u /* read only -- cannot be cleared */
  95 
  96 
  97 /* create a new extra field */
  98 
  99 #define ZIP_EXTRA_FIELD_ALL     ZIP_UINT16_MAX
 100 #define ZIP_EXTRA_FIELD_NEW     ZIP_UINT16_MAX
 101 
 102 /* flags for compression and encryption sources */
 103 
 104 #define ZIP_CODEC_DECODE        0 /* decompress/decrypt (encode flag not set) */
 105 #define ZIP_CODEC_ENCODE        1 /* compress/encrypt */
 106 
 107 
 108 /* libzip error codes */
 109 
 110 #define ZIP_ER_OK             0  /* N No error */
 111 #define ZIP_ER_MULTIDISK      1  /* N Multi-disk zip archives not supported */
 112 #define ZIP_ER_RENAME         2  /* S Renaming temporary file failed */
 113 #define ZIP_ER_CLOSE          3  /* S Closing zip archive failed */
 114 #define ZIP_ER_SEEK           4  /* S Seek error */
 115 #define ZIP_ER_READ           5  /* S Read error */
 116 #define ZIP_ER_WRITE          6  /* S Write error */
 117 #define ZIP_ER_CRC            7  /* N CRC error */
 118 #define ZIP_ER_ZIPCLOSED      8  /* N Containing zip archive was closed */
 119 #define ZIP_ER_NOENT          9  /* N No such file */
 120 #define ZIP_ER_EXISTS        10  /* N File already exists */
 121 #define ZIP_ER_OPEN          11  /* S Can't open file */
 122 #define ZIP_ER_TMPOPEN       12  /* S Failure to create temporary file */
 123 #define ZIP_ER_ZLIB          13  /* Z Zlib error */
 124 #define ZIP_ER_MEMORY        14  /* N Malloc failure */
 125 #define ZIP_ER_CHANGED       15  /* N Entry has been changed */
 126 #define ZIP_ER_COMPNOTSUPP   16  /* N Compression method not supported */
 127 #define ZIP_ER_EOF           17  /* N Premature EOF */
 128 #define ZIP_ER_INVAL         18  /* N Invalid argument */
 129 #define ZIP_ER_NOZIP         19  /* N Not a zip archive */
 130 #define ZIP_ER_INTERNAL      20  /* N Internal error */
 131 #define ZIP_ER_INCONS        21  /* N Zip archive inconsistent */
 132 #define ZIP_ER_REMOVE        22  /* S Can't remove file */
 133 #define ZIP_ER_DELETED       23  /* N Entry has been deleted */
 134 #define ZIP_ER_ENCRNOTSUPP   24  /* N Encryption method not supported */
 135 #define ZIP_ER_RDONLY        25  /* N Read-only archive */ 
 136 #define ZIP_ER_NOPASSWD      26  /* N No password provided */
 137 #define ZIP_ER_WRONGPASSWD   27  /* N Wrong password provided */
 138 
 139 /* type of system error value */
 140 
 141 #define ZIP_ET_NONE           0  /* sys_err unused */
 142 #define ZIP_ET_SYS            1  /* sys_err is errno */
 143 #define ZIP_ET_ZLIB           2  /* sys_err is zlib error code */
 144 
 145 /* compression methods */
 146 
 147 #define ZIP_CM_DEFAULT        -1  /* better of deflate or store */
 148 #define ZIP_CM_STORE           0  /* stored (uncompressed) */
 149 #define ZIP_CM_SHRINK          1  /* shrunk */
 150 #define ZIP_CM_REDUCE_1        2  /* reduced with factor 1 */
 151 #define ZIP_CM_REDUCE_2        3  /* reduced with factor 2 */
 152 #define ZIP_CM_REDUCE_3        4  /* reduced with factor 3 */
 153 #define ZIP_CM_REDUCE_4        5  /* reduced with factor 4 */
 154 #define ZIP_CM_IMPLODE         6  /* imploded */
 155 /* 7 - Reserved for Tokenizing compression algorithm */
 156 #define ZIP_CM_DEFLATE         8  /* deflated */
 157 #define ZIP_CM_DEFLATE64       9  /* deflate64 */
 158 #define ZIP_CM_PKWARE_IMPLODE 10  /* PKWARE imploding */
 159 /* 11 - Reserved by PKWARE */
 160 #define ZIP_CM_BZIP2          12  /* compressed using BZIP2 algorithm */
 161 /* 13 - Reserved by PKWARE */
 162 #define ZIP_CM_LZMA           14  /* LZMA (EFS) */
 163 /* 15-17 - Reserved by PKWARE */
 164 #define ZIP_CM_TERSE          18  /* compressed using IBM TERSE (new) */
 165 #define ZIP_CM_LZ77           19  /* IBM LZ77 z Architecture (PFS) */
 166 #define ZIP_CM_WAVPACK        97  /* WavPack compressed data */
 167 #define ZIP_CM_PPMD           98  /* PPMd version I, Rev 1 */
 168 
 169 /* encryption methods */
 170 
 171 #define ZIP_EM_NONE            0  /* not encrypted */
 172 #define ZIP_EM_TRAD_PKWARE     1  /* traditional PKWARE encryption */
 173 #if 0 /* Strong Encryption Header not parsed yet */
 174 #define ZIP_EM_DES        0x6601  /* strong encryption: DES */
 175 #define ZIP_EM_RC2_OLD    0x6602  /* strong encryption: RC2, version < 5.2 */
 176 #define ZIP_EM_3DES_168   0x6603
 177 #define ZIP_EM_3DES_112   0x6609
 178 #define ZIP_EM_AES_128    0x660e
 179 #define ZIP_EM_AES_192    0x660f
 180 #define ZIP_EM_AES_256    0x6610
 181 #define ZIP_EM_RC2        0x6702  /* strong encryption: RC2, version >= 5.2 */
 182 #define ZIP_EM_RC4        0x6801
 183 #endif
 184 #define ZIP_EM_UNKNOWN    0xffff  /* unknown algorithm */
 185 
 186 #define ZIP_OPSYS_DOS           0x00u
 187 #define ZIP_OPSYS_AMIGA         0x01u
 188 #define ZIP_OPSYS_OPENVMS       0x02u
 189 #define ZIP_OPSYS_UNIX          0x03u
 190 #define ZIP_OPSYS_VM_CMS        0x04u
 191 #define ZIP_OPSYS_ATARI_ST      0x05u
 192 #define ZIP_OPSYS_OS_2          0x06u
 193 #define ZIP_OPSYS_MACINTOSH     0x07u
 194 #define ZIP_OPSYS_Z_SYSTEM      0x08u
 195 #define ZIP_OPSYS_CPM           0x09u
 196 #define ZIP_OPSYS_WINDOWS_NTFS  0x0au
 197 #define ZIP_OPSYS_MVS           0x0bu
 198 #define ZIP_OPSYS_VSE           0x0cu
 199 #define ZIP_OPSYS_ACORN_RISC    0x0du
 200 #define ZIP_OPSYS_VFAT          0x0eu
 201 #define ZIP_OPSYS_ALTERNATE_MVS 0x0fu
 202 #define ZIP_OPSYS_BEOS          0x10u
 203 #define ZIP_OPSYS_TANDEM        0x11u
 204 #define ZIP_OPSYS_OS_400        0x12u
 205 #define ZIP_OPSYS_OS_X          0x13u
 206 
 207 #define ZIP_OPSYS_DEFAULT       ZIP_OPSYS_UNIX
 208 
 209 
 210 
 211 enum zip_source_cmd {
 212     ZIP_SOURCE_OPEN,    /* prepare for reading */
 213     ZIP_SOURCE_READ,    /* read data */
 214     ZIP_SOURCE_CLOSE,   /* reading is done */
 215     ZIP_SOURCE_STAT,    /* get meta information */
 216     ZIP_SOURCE_ERROR,   /* get error information */
 217     ZIP_SOURCE_FREE     /* cleanup and free resources */
 218 };
 219 
 220 #define ZIP_SOURCE_ERR_LOWER    -2
 221 
 222 #define ZIP_STAT_NAME                   0x0001u
 223 #define ZIP_STAT_INDEX                  0x0002u
 224 #define ZIP_STAT_SIZE                   0x0004u
 225 #define ZIP_STAT_COMP_SIZE              0x0008u
 226 #define ZIP_STAT_MTIME                  0x0010u
 227 #define ZIP_STAT_CRC                    0x0020u
 228 #define ZIP_STAT_COMP_METHOD            0x0040u
 229 #define ZIP_STAT_ENCRYPTION_METHOD      0x0080u
 230 #define ZIP_STAT_FLAGS                  0x0100u
 231 
 232 struct zip_stat {
 233     zip_uint64_t valid;                 /* which fields have valid values */
 234     const char *name;                   /* name of the file */
 235     zip_uint64_t index;                 /* index within archive */
 236     zip_uint64_t size;                  /* size of file (uncompressed) */
 237     zip_uint64_t comp_size;             /* size of file (compressed) */
 238     time_t mtime;                       /* modification time */
 239     zip_uint32_t crc;                   /* crc of file data */
 240     zip_uint16_t comp_method;           /* compression method used */
 241     zip_uint16_t encryption_method;     /* encryption method used */
 242     zip_uint32_t flags;                 /* reserved for future use */
 243 };
 244 
 245 struct zip;
 246 struct zip_file;
 247 struct zip_source;
 248 
 249 typedef zip_uint32_t zip_flags_t;    
 250 
 251 typedef zip_int64_t (*zip_source_callback)(void *, void *, zip_uint64_t,
 252                                            enum zip_source_cmd);
 253 
 254 
 255 
 256 #ifndef ZIP_DISABLE_DEPRECATED
 257 ZIP_EXTERN zip_int64_t zip_add(struct zip *, const char *, struct zip_source *); /* use zip_file_add */
 258 ZIP_EXTERN zip_int64_t zip_add_dir(struct zip *, const char *); /* use zip_dir_add */
 259 ZIP_EXTERN const char *zip_get_file_comment(struct zip *, zip_uint64_t, int *, int); /* use zip_file_get_comment */
 260 ZIP_EXTERN int zip_get_num_files(struct zip *);  /* use zip_get_num_entries instead */
 261 ZIP_EXTERN int zip_rename(struct zip *, zip_uint64_t, const char *); /* use zip_file_rename */
 262 ZIP_EXTERN int zip_replace(struct zip *, zip_uint64_t, struct zip_source *); /* use zip_file_replace */
 263 ZIP_EXTERN int zip_set_file_comment(struct zip *, zip_uint64_t, const char *, int); /* use zip_file_set_comment */
 264 #endif
 265 
 266 ZIP_EXTERN int zip_archive_set_tempdir(struct zip *, const char *);
 267 ZIP_EXTERN int zip_close(struct zip *);
 268 ZIP_EXTERN int zip_delete(struct zip *, zip_uint64_t);
 269 ZIP_EXTERN zip_int64_t zip_dir_add(struct zip *, const char *, zip_flags_t);
 270 ZIP_EXTERN void zip_discard(struct zip *);
 271 ZIP_EXTERN void zip_error_clear(struct zip *);
 272 ZIP_EXTERN void zip_error_get(struct zip *, int *, int *);
 273 ZIP_EXTERN int zip_error_get_sys_type(int);
 274 ZIP_EXTERN int zip_error_to_str(char *, zip_uint64_t, int, int);
 275 ZIP_EXTERN int zip_fclose(struct zip_file *);
 276 ZIP_EXTERN struct zip *zip_fdopen(int, int, int *);
 277 ZIP_EXTERN zip_int64_t zip_file_add(struct zip *, const char *, struct zip_source *, zip_flags_t);
 278 ZIP_EXTERN void zip_file_error_clear(struct zip_file *);
 279 ZIP_EXTERN void zip_file_error_get(struct zip_file *, int *, int *);
 280 ZIP_EXTERN int zip_file_extra_field_delete(struct zip *, zip_uint64_t, zip_uint16_t, zip_flags_t);
 281 ZIP_EXTERN int zip_file_extra_field_delete_by_id(struct zip *, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_flags_t);
 282 ZIP_EXTERN int zip_file_extra_field_set(struct zip *, zip_uint64_t, zip_uint16_t, zip_uint16_t, const zip_uint8_t *, zip_uint16_t, zip_flags_t);
 283 ZIP_EXTERN zip_int16_t zip_file_extra_fields_count(struct zip *, zip_uint64_t, zip_flags_t);
 284 ZIP_EXTERN zip_int16_t zip_file_extra_fields_count_by_id(struct zip *, zip_uint64_t, zip_uint16_t, zip_flags_t);
 285 ZIP_EXTERN const zip_uint8_t *zip_file_extra_field_get(struct zip *, zip_uint64_t, zip_uint16_t, zip_uint16_t *, zip_uint16_t *, zip_flags_t);
 286 ZIP_EXTERN const zip_uint8_t *zip_file_extra_field_get_by_id(struct zip *, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_uint16_t *, zip_flags_t);
 287 ZIP_EXTERN const char *zip_file_get_comment(struct zip *, zip_uint64_t, zip_uint32_t *, zip_flags_t);
 288 ZIP_EXTERN int zip_file_get_external_attributes(struct zip *, zip_uint64_t, zip_flags_t, zip_uint8_t *, zip_uint32_t *);
 289 ZIP_EXTERN int zip_file_rename(struct zip *, zip_uint64_t, const char *, zip_flags_t);
 290 ZIP_EXTERN int zip_file_replace(struct zip *, zip_uint64_t, struct zip_source *, zip_flags_t);
 291 ZIP_EXTERN int zip_file_set_comment(struct zip *, zip_uint64_t, const char *, zip_uint16_t, zip_flags_t);
 292 ZIP_EXTERN int zip_file_set_external_attributes(struct zip *, zip_uint64_t, zip_flags_t, zip_uint8_t, zip_uint32_t);
 293 ZIP_EXTERN const char *zip_file_strerror(struct zip_file *);
 294 ZIP_EXTERN struct zip_file *zip_fopen(struct zip *, const char *, zip_flags_t);
 295 ZIP_EXTERN struct zip_file *zip_fopen_encrypted(struct zip *, const char *, zip_flags_t, const char *);
 296 ZIP_EXTERN struct zip_file *zip_fopen_index(struct zip *, zip_uint64_t, zip_flags_t);
 297 ZIP_EXTERN struct zip_file *zip_fopen_index_encrypted(struct zip *, zip_uint64_t, zip_flags_t, const char *);
 298 ZIP_EXTERN zip_int64_t zip_fread(struct zip_file *, void *, zip_uint64_t);
 299 ZIP_EXTERN const char *zip_get_archive_comment(struct zip *, int *, zip_flags_t);
 300 ZIP_EXTERN int zip_get_archive_flag(struct zip *, zip_flags_t, zip_flags_t);
 301 ZIP_EXTERN const char *zip_get_name(struct zip *, zip_uint64_t, zip_flags_t);
 302 ZIP_EXTERN zip_int64_t zip_get_num_entries(struct zip *, zip_flags_t);
 303 ZIP_EXTERN zip_int64_t zip_name_locate(struct zip *, const char *, zip_flags_t);
 304 ZIP_EXTERN struct zip *zip_open(const char *, int, int *);
 305 ZIP_EXTERN int zip_set_archive_comment(struct zip *, const char *, zip_uint16_t);
 306 ZIP_EXTERN int zip_set_archive_flag(struct zip *, zip_flags_t, int);
 307 ZIP_EXTERN int zip_set_default_password(struct zip *, const char *);
 308 ZIP_EXTERN int zip_set_file_compression(struct zip *, zip_uint64_t, zip_int32_t, zip_uint32_t);
 309 ZIP_EXTERN struct zip_source *zip_source_buffer(struct zip *, const void *, zip_uint64_t, int);
 310 ZIP_EXTERN struct zip_source *zip_source_file(struct zip *, const char *, zip_uint64_t, zip_int64_t);
 311 ZIP_EXTERN struct zip_source *zip_source_filep(struct zip *, FILE *, zip_uint64_t, zip_int64_t);
 312 ZIP_EXTERN void zip_source_free(struct zip_source *);
 313 ZIP_EXTERN struct zip_source *zip_source_function(struct zip *, zip_source_callback, void *);
 314 ZIP_EXTERN struct zip_source *zip_source_zip(struct zip *, struct zip *, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_int64_t);
 315 ZIP_EXTERN int zip_stat(struct zip *, const char *, zip_flags_t, struct zip_stat *);
 316 ZIP_EXTERN int zip_stat_index(struct zip *, zip_uint64_t, zip_flags_t, struct zip_stat *);
 317 ZIP_EXTERN void zip_stat_init(struct zip_stat *);
 318 ZIP_EXTERN const char *zip_strerror(struct zip *);
 319 ZIP_EXTERN int zip_unchange(struct zip *, zip_uint64_t);
 320 ZIP_EXTERN int zip_unchange_all(struct zip *);
 321 ZIP_EXTERN int zip_unchange_archive(struct zip *);
 322 
 323 #ifdef __cplusplus
 324 }
 325 #endif
 326 
 327 #endif /* _HAD_ZIP_H */

/* [<][>][^][v][top][bottom][index][help] */