Annotation of embedaddon/php/ext/zip/lib/zipint.h, revision 1.1.1.1

1.1       misho       1: #ifndef _HAD_ZIPINT_H
                      2: #define _HAD_ZIPINT_H
                      3: 
                      4: /*
                      5:   zipint.h -- internal declarations.
                      6:   Copyright (C) 1999-2009 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: #include <zlib.h>
                     38: 
                     39: #include "zip.h"
                     40: 
                     41: #ifdef PHP_WIN32
                     42: #include <windows.h>
                     43: #include <wchar.h>
                     44: #define _zip_rename(s, t)                                              \
                     45:        (!MoveFileExA((s), (t),                                         \
                     46:                     MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING))
                     47: #else
                     48: #define _zip_rename    rename
                     49: #endif
                     50: 
                     51: #ifndef strcasecmp
                     52: # define strcmpi strcasecmp 
                     53: #endif
                     54: 
                     55: #ifndef HAVE_FSEEKO
                     56: #define fseeko(s, o, w)        (fseek((s), (long int)(o), (w)))
                     57: #endif
                     58: #ifndef HAVE_FTELLO
                     59: #define ftello(s)      ((long)ftell((s)))
                     60: #endif
                     61: 
                     62: 
                     63: 
                     64: #define CENTRAL_MAGIC "PK\1\2"
                     65: #define LOCAL_MAGIC   "PK\3\4"
                     66: #define EOCD_MAGIC    "PK\5\6"
                     67: #define DATADES_MAGIC "PK\7\8"
                     68: #define TORRENT_SIG    "TORRENTZIPPED-"
                     69: #define TORRENT_SIG_LEN        14
                     70: #define TORRENT_CRC_LEN 8
                     71: #define TORRENT_MEM_LEVEL      8
                     72: #define CDENTRYSIZE         46u
                     73: #define LENTRYSIZE          30
                     74: #undef MAXCOMLEN /* defined as 19 on BSD for max command name */
                     75: #define MAXCOMLEN        65536
                     76: #define EOCDLEN             22
                     77: #define CDBUFSIZE       (MAXCOMLEN+EOCDLEN)
                     78: #define BUFSIZE                8192
                     79: 
                     80: 
                     81: 
                     82: /* state of change of a file in zip archive */
                     83: 
                     84: enum zip_state { ZIP_ST_UNCHANGED, ZIP_ST_DELETED, ZIP_ST_REPLACED,
                     85:                 ZIP_ST_ADDED, ZIP_ST_RENAMED };
                     86: 
                     87: /* constants for struct zip_file's member flags */
                     88: 
                     89: #define ZIP_ZF_EOF     1 /* EOF reached */
                     90: #define ZIP_ZF_DECOMP  2 /* decompress data */
                     91: #define ZIP_ZF_CRC     4 /* compute and compare CRC */
                     92: 
                     93: /* directory entry: general purpose bit flags */
                     94: 
                     95: #define ZIP_GPBF_ENCRYPTED             0x0001  /* is encrypted */
                     96: #define ZIP_GPBF_DATA_DESCRIPTOR       0x0008  /* crc/size after file data */
                     97: #define ZIP_GPBF_STRONG_ENCRYPTION     0x0040  /* uses strong encryption */
                     98: 
                     99: /* error information */
                    100: 
                    101: struct zip_error {
                    102:     int zip_err;       /* libzip error code (ZIP_ER_*) */
                    103:     int sys_err;       /* copy of errno (E*) or zlib error code */
                    104:     char *str;         /* string representation or NULL */
                    105: };
                    106: 
                    107: /* zip archive, part of API */
                    108: 
                    109: struct zip {
                    110:     char *zn;                  /* file name */
                    111:     FILE *zp;                  /* file */
                    112:     struct zip_error error;    /* error information */
                    113: 
                    114:     unsigned int flags;                /* archive global flags */
                    115:     unsigned int ch_flags;     /* changed archive global flags */
                    116: 
                    117:     struct zip_cdir *cdir;     /* central directory */
                    118:     char *ch_comment;          /* changed archive comment */
                    119:     int ch_comment_len;                /* length of changed zip archive
                    120:                                 * comment, -1 if unchanged */
                    121:     int nentry;                        /* number of entries */
                    122:     int nentry_alloc;          /* number of entries allocated */
                    123:     struct zip_entry *entry;   /* entries */
                    124:     int nfile;                 /* number of opened files within archive */
                    125:     int nfile_alloc;           /* number of files allocated */
                    126:     struct zip_file **file;    /* opened files within archive */
                    127: };
                    128: 
                    129: /* file in zip archive, part of API */
                    130: 
                    131: struct zip_file {
                    132:     struct zip *za;            /* zip archive containing this file */
                    133:     struct zip_error error;    /* error information */
                    134:     int flags;                 /* -1: eof, >0: error */
                    135: 
                    136:     int method;                        /* compression method */
                    137:     off_t fpos;                        /* position within zip file (fread/fwrite) */
                    138:     unsigned long bytes_left;  /* number of bytes left to read */
                    139:     unsigned long cbytes_left;  /* number of bytes of compressed data left */
                    140: 
                    141:     unsigned long crc;         /* CRC so far */
                    142:     unsigned long crc_orig;    /* CRC recorded in archive */
                    143: 
                    144:     char *buffer;
                    145:     z_stream *zstr;
                    146: };
                    147: 
                    148: /* zip archive directory entry (central or local) */
                    149: 
                    150: struct zip_dirent {
                    151:     unsigned short version_madeby;     /* (c)  version of creator */
                    152:     unsigned short version_needed;     /* (cl) version needed to extract */
                    153:     unsigned short bitflags;           /* (cl) general purpose bit flag */
                    154:     unsigned short comp_method;                /* (cl) compression method used */
                    155:     time_t last_mod;                   /* (cl) time of last modification */
                    156:     unsigned int crc;                  /* (cl) CRC-32 of uncompressed data */
                    157:     unsigned int comp_size;            /* (cl) size of commpressed data */
                    158:     unsigned int uncomp_size;          /* (cl) size of uncommpressed data */
                    159:     char *filename;                    /* (cl) file name (NUL-terminated) */
                    160:     unsigned short filename_len;       /* (cl) length of filename (w/o NUL) */
                    161:     char *extrafield;                  /* (cl) extra field */
                    162:     unsigned short extrafield_len;     /* (cl) length of extra field */
                    163:     char *comment;                     /* (c)  file comment */
                    164:     unsigned short comment_len;                /* (c)  length of file comment */
                    165:     unsigned short disk_number;                /* (c)  disk number start */
                    166:     unsigned short int_attrib;         /* (c)  internal file attributes */
                    167:     unsigned int ext_attrib;           /* (c)  external file attributes */
                    168:     unsigned int offset;               /* (c)  offset of local header  */
                    169: };
                    170: 
                    171: /* zip archive central directory */
                    172: 
                    173: struct zip_cdir {
                    174:     struct zip_dirent *entry;  /* directory entries */
                    175:     int nentry;                        /* number of entries */
                    176: 
                    177:     unsigned int size;         /* size of central direcotry */
                    178:     unsigned int offset;       /* offset of central directory in file */
                    179:     char *comment;             /* zip archive comment */
                    180:     unsigned short comment_len;        /* length of zip archive comment */
                    181: };
                    182: 
                    183: 
                    184: 
                    185: struct zip_source {
                    186:     zip_source_callback f;
                    187:     void *ud;
                    188: };
                    189: 
                    190: /* entry in zip archive directory */
                    191: 
                    192: struct zip_entry {
                    193:     enum zip_state state;
                    194:     struct zip_source *source;
                    195:     char *ch_filename;
                    196:     char *ch_comment;
                    197:     int ch_comment_len;
                    198: };
                    199: 
                    200: 
                    201: 
                    202: extern const char * const _zip_err_str[];
                    203: extern const int _zip_nerr_str;
                    204: extern const int _zip_err_type[];
                    205: 
                    206: 
                    207: 
                    208: #define ZIP_ENTRY_DATA_CHANGED(x)      \
                    209:                        ((x)->state == ZIP_ST_REPLACED  \
                    210:                         || (x)->state == ZIP_ST_ADDED)
                    211: 
                    212: 
                    213: 
                    214: int _zip_cdir_compute_crc(struct zip *, uLong *);
                    215: void _zip_cdir_free(struct zip_cdir *);
                    216: int _zip_cdir_grow(struct zip_cdir *, int, struct zip_error *);
                    217: struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
                    218: int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
                    219: 
                    220: void _zip_dirent_finalize(struct zip_dirent *);
                    221: void _zip_dirent_init(struct zip_dirent *);
                    222: int _zip_dirent_read(struct zip_dirent *, FILE *, unsigned char **,
                    223:                     unsigned int *, int, struct zip_error *);
                    224: void _zip_dirent_torrent_normalize(struct zip_dirent *);
                    225: int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
                    226: 
                    227: void _zip_entry_free(struct zip_entry *);
                    228: void _zip_entry_init(struct zip *, int);
                    229: struct zip_entry *_zip_entry_new(struct zip *);
                    230: 
                    231: void _zip_error_clear(struct zip_error *);
                    232: void _zip_error_copy(struct zip_error *, struct zip_error *);
                    233: void _zip_error_fini(struct zip_error *);
                    234: void _zip_error_get(struct zip_error *, int *, int *);
                    235: void _zip_error_init(struct zip_error *);
                    236: void _zip_error_set(struct zip_error *, int, int);
                    237: const char *_zip_error_strerror(struct zip_error *);
                    238: 
                    239: int _zip_file_fillbuf(void *, size_t, struct zip_file *);
                    240: unsigned int _zip_file_get_offset(struct zip *, int);
                    241: 
                    242: int _zip_filerange_crc(FILE *, off_t, off_t, uLong *, struct zip_error *);
                    243: 
                    244: struct zip_source *_zip_source_file_or_p(struct zip *, const char *, FILE *,
                    245:                                         off_t, off_t);
                    246: 
                    247: void _zip_free(struct zip *);
                    248: const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
                    249: int _zip_local_header_read(struct zip *, int);
                    250: void *_zip_memdup(const void *, size_t, struct zip_error *);
                    251: int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
                    252: struct zip *_zip_new(struct zip_error *);
                    253: unsigned short _zip_read2(unsigned char **);
                    254: unsigned int _zip_read4(unsigned char **);
                    255: int _zip_replace(struct zip *, int, const char *, struct zip_source *);
                    256: int _zip_set_name(struct zip *, int, const char *);
                    257: int _zip_unchange(struct zip *, int, int);
                    258: void _zip_unchange_data(struct zip_entry *);
                    259: 
                    260: #endif /* zipint.h */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>