File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / phar / pharzip.h
Revision 1.1.1.4 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 20:03:54 2014 UTC (10 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_29, HEAD
php 5.4.29

    1: /*
    2:   +----------------------------------------------------------------------+
    3:   | phar php single-file executable PHP extension                        |
    4:   +----------------------------------------------------------------------+
    5:   | Copyright (c) 2006-2014 The PHP Group                                |
    6:   +----------------------------------------------------------------------+
    7:   | This source file is subject to version 3.01 of the PHP license,      |
    8:   | that is bundled with this package in the file LICENSE, and is        |
    9:   | available through the world-wide-web at the following url:           |
   10:   | http://www.php.net/license/3_01.txt.                                 |
   11:   | If you did not receive a copy of the PHP license and are unable to   |
   12:   | obtain it through the world-wide-web, please send a note to          |
   13:   | license@php.net so we can mail you a copy immediately.               |
   14:   +----------------------------------------------------------------------+
   15:   | Authors: Gregory Beaver <cellog@php.net>                             |
   16:   |          Marcus Boerger <helly@php.net>                              |
   17:   +----------------------------------------------------------------------+
   18: */
   19: 
   20: /* $Id: pharzip.h,v 1.1.1.4 2014/06/15 20:03:54 misho Exp $ */
   21: 
   22: typedef struct _phar_zip_file_header {
   23: 	char signature[4];       /* local file header signature     4 bytes  (0x04034b50) */
   24: 	char zipversion[2];      /* version needed to extract       2 bytes */
   25: 	char flags[2];        /* general purpose bit flag        2 bytes */
   26: 	char compressed[2];   /* compression method              2 bytes */
   27: 	char timestamp[2];    /* last mod file time              2 bytes */
   28: 	char datestamp[2];    /* last mod file date              2 bytes */
   29: 	char crc32[4];        /* crc-32                          4 bytes */
   30: 	char compsize[4];     /* compressed size                 4 bytes */
   31: 	char uncompsize[4];   /* uncompressed size               4 bytes */
   32: 	char filename_len[2]; /* file name length                2 bytes */
   33: 	char extra_len[2];    /* extra field length              2 bytes */
   34: /* file name (variable size) */
   35: /* extra field (variable size) */
   36: } phar_zip_file_header;
   37: 
   38: /* unused in this release */
   39: typedef struct _phar_zip_file_datadesc {
   40: 	char signature[4];  /* signature (optional)            4 bytes */
   41: 	char crc32[4];      /* crc-32                          4 bytes */
   42: 	char compsize[4];   /* compressed size                 4 bytes */
   43: 	char uncompsize[4]; /* uncompressed size               4 bytes */
   44: } phar_zip_data_desc;
   45: 
   46: /* unused in this release */
   47: typedef struct _phar_zip_file_datadesc_zip64 {
   48: 	char crc32[4];       /* crc-32                          4 bytes */
   49: 	char compsize[4];    /* compressed size                 8 bytes */
   50: 	char compsize2[4];
   51: 	char uncompsize[4];  /* uncompressed size               8 bytes */
   52: 	char uncompsize2[4];
   53: } phar_zip_data_desc_zip64;
   54: 
   55: typedef struct _phar_zip_archive_extra_data_record {
   56: 	char signature[4];   /* archive extra data signature    4 bytes  (0x08064b50) */
   57: 	char len[4];      /* extra field length              4 bytes */
   58: /* extra field data                (variable size) */
   59: } phar_zip_archive_extra_data_record;
   60: 
   61: /* madeby/extractneeded value if bzip2 compression is used */
   62: #define PHAR_ZIP_BZIP2 "46"
   63: /* madeby/extractneeded value for other cases */
   64: #define PHAR_ZIP_NORM  "20"
   65: 
   66: #define PHAR_ZIP_FLAG_ENCRYPTED 0x0001
   67: /* data descriptor present for this file */
   68: #define PHAR_ZIP_FLAG_DATADESC  0x0008
   69: #define PHAR_ZIP_FLAG_UTF8      0x0400
   70: 
   71: /*
   72: 0 - The file is stored (no compression)
   73: 1 - The file is Shrunk
   74: 2 - The file is Reduced with compression factor 1
   75: 3 - The file is Reduced with compression factor 2
   76: 4 - The file is Reduced with compression factor 3
   77: 5 - The file is Reduced with compression factor 4
   78: 6 - The file is Imploded
   79: 7 - Reserved for Tokenizing compression algorithm
   80: 8 - The file is Deflated
   81: 9 - Enhanced Deflating using Deflate64(tm)
   82: 10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
   83: 11 - Reserved by PKWARE
   84: 12 - File is compressed using BZIP2 algorithm
   85: 13 - Reserved by PKWARE
   86: 14 - LZMA (EFS)
   87: 15 - Reserved by PKWARE
   88: 16 - Reserved by PKWARE
   89: 17 - Reserved by PKWARE
   90: 18 - File is compressed using IBM TERSE (new)
   91: 19 - IBM LZ77 z Architecture (PFS)
   92: 97 - WavPack compressed data
   93: 98 - PPMd version I, Rev 1
   94: */
   95: #define PHAR_ZIP_COMP_NONE    0
   96: #define PHAR_ZIP_COMP_DEFLATE 8
   97: #define PHAR_ZIP_COMP_BZIP2   12
   98: 
   99: /*
  100:          -ASi Unix Extra Field:
  101:           ====================
  102: 
  103:           The following is the layout of the ASi extra block for Unix.  The
  104:           local-header and central-header versions are identical.
  105:           (Last Revision 19960916)
  106: 
  107:           Value         Size        Description
  108:           -----         ----        -----------
  109:   (Unix3) 0x756e        Short       tag for this extra block type ("nu")
  110:           TSize         Short       total data size for this block
  111:           CRC           Long        CRC-32 of the remaining data
  112:           Mode          Short       file permissions
  113:           SizDev        Long        symlink'd size OR major/minor dev num
  114:           UID           Short       user ID
  115:           GID           Short       group ID
  116:           (var.)        variable    symbolic link filename
  117: 
  118:           Mode is the standard Unix st_mode field from struct stat, containing
  119:           user/group/other permissions, setuid/setgid and symlink info, etc.
  120: 
  121:           If Mode indicates that this file is a symbolic link, SizDev is the
  122:           size of the file to which the link points.  Otherwise, if the file
  123:           is a device, SizDev contains the standard Unix st_rdev field from
  124:           struct stat (includes the major and minor numbers of the device).
  125:           SizDev is undefined in other cases.
  126: 
  127:           If Mode indicates that the file is a symbolic link, the final field
  128:           will be the name of the file to which the link points.  The file-
  129:           name length can be inferred from TSize.
  130: 
  131:           [Note that TSize may incorrectly refer to the data size not counting
  132:            the CRC; i.e., it may be four bytes too small.]
  133: */
  134: 
  135: typedef struct _phar_zip_extra_field_header {
  136: 	char tag[2];
  137: 	char size[2];
  138: } phar_zip_extra_field_header;
  139: 
  140: typedef struct _phar_zip_unix3 {
  141: 	char tag[2];            /* 0x756e        Short       tag for this extra block type ("nu") */
  142: 	char size[2];        /* TSize         Short       total data size for this block */
  143: 	char crc32[4];       /* CRC           Long        CRC-32 of the remaining data */
  144: 	char perms[2];       /* Mode          Short       file permissions */
  145: 	char symlinksize[4]; /* SizDev        Long        symlink'd size OR major/minor dev num */
  146: 	char uid[2];         /* UID           Short       user ID */
  147: 	char gid[2];         /* GID           Short       group ID */
  148: /* (var.)        variable    symbolic link filename */
  149: } phar_zip_unix3;
  150: 
  151: typedef struct _phar_zip_central_dir_file {
  152: 	char signature[4];            /* central file header signature   4 bytes  (0x02014b50) */
  153: 	char madeby[2];               /* version made by                 2 bytes */
  154: 	char zipversion[2];           /* version needed to extract       2 bytes */
  155: 	char flags[2];             /* general purpose bit flag        2 bytes */
  156: 	char compressed[2];        /* compression method              2 bytes */
  157: 	char timestamp[2];         /* last mod file time              2 bytes */
  158: 	char datestamp[2];         /* last mod file date              2 bytes */
  159: 	char crc32[4];             /* crc-32                          4 bytes */
  160: 	char compsize[4];          /* compressed size                 4 bytes */
  161: 	char uncompsize[4];        /* uncompressed size               4 bytes */
  162: 	char filename_len[2];      /* file name length                2 bytes */
  163: 	char extra_len[2];         /* extra field length              2 bytes */
  164: 	char comment_len[2];       /* file comment length             2 bytes */
  165: 	char disknumber[2];        /* disk number start               2 bytes */
  166: 	char internal_atts[2];     /* internal file attributes        2 bytes */
  167: 	char external_atts[4];     /* external file attributes        4 bytes */
  168: 	char offset[4];            /* relative offset of local header 4 bytes */
  169: 
  170: /* file name (variable size) */
  171: /* extra field (variable size) */
  172: /* file comment (variable size) */
  173: } phar_zip_central_dir_file;
  174: 
  175: typedef struct _phar_zip_dir_signature {
  176: 	char signature[4];  /* header signature                4 bytes  (0x05054b50) */
  177: 	char size[2];    /* size of data                    2 bytes */
  178: } phar_zip_dir_signature;
  179: 
  180: /* unused in this release */
  181: typedef struct _phar_zip64_dir_end {
  182: 	char signature[4];        /* zip64 end of central dir 
  183:                                  signature                       4 bytes  (0x06064b50) */
  184: 	char size1[4];         /* size of zip64 end of central
  185:                                  directory record                8 bytes */
  186: 	char size2[4];
  187: 	char madeby[2];           /* version made by                 2 bytes */
  188: 	char extractneeded[2]; /* version needed to extract       2 bytes */
  189: 	char disknum[4];       /* number of this disk             4 bytes */
  190: 	char cdir_num[4];      /* number of the disk with the 
  191:                                  start of the central directory  4 bytes */
  192: 	char entries1[4];      /* total number of entries in the
  193:                                  central directory on this disk  8 bytes */
  194: 	char entries2[4];
  195: 	char entriestotal1[4]; /* total number of entries in the
  196:                                  central directory               8 bytes */
  197: 	char entriestotal2[4];
  198: 	char cdirsize1[4];     /* size of the central directory   8 bytes */
  199: 	char cdirsize2[4];
  200: 	char offset1[4];       /* offset of start of central
  201:                                  directory with respect to
  202:                                  the starting disk number        8 bytes */
  203: 	char offset2[4];
  204: /* zip64 extensible data sector    (variable size) */
  205: } phar_zip64_dir_end;
  206: 
  207: /* unused in this release */
  208: typedef struct _phar_zip64_dir_locator {
  209: 	char signature[4];     /* zip64 end of central dir locator 
  210:                               signature                       4 bytes  (0x07064b50) */
  211: 	char disknum[4];    /* number of the disk with the
  212:                               start of the zip64 end of 
  213:                               central directory               4 bytes */
  214: 	char diroffset1[4]; /* relative offset of the zip64
  215:                               end of central directory record 8 bytes */
  216: 	char diroffset2[4];
  217: 	char totaldisks[4]; /* total number of disks           4 bytes */
  218: } phar_zip64_dir_locator;
  219: 
  220: typedef struct _phar_zip_dir_end {
  221: 	char signature[4];           /* end of central dir signature    4 bytes  (0x06054b50) */
  222: 	char disknumber[2];       /* number of this disk             2 bytes */
  223: 	char centraldisk[2];      /* number of the disk with the
  224:                                     start of the central directory  2 bytes */
  225: 	char counthere[2];        /* total number of entries in the
  226:                                     central directory on this disk  2 bytes */
  227: 	char count[2];            /* total number of entries in
  228:                                     the central directory           2 bytes */
  229: 	char cdir_size[4];        /* size of the central directory   4 bytes */
  230: 	char cdir_offset[4];      /* offset of start of central
  231:                                     directory with respect to
  232:                                     the starting disk number        4 bytes */
  233: 	char comment_len[2];      /* .ZIP file comment length        2 bytes */
  234: /* .ZIP file comment       (variable size) */
  235: } phar_zip_dir_end;
  236: /*
  237:  * Local variables:
  238:  * tab-width: 4
  239:  * c-basic-offset: 4
  240:  * End:
  241:  * vim600: noet sw=4 ts=4 fdm=marker
  242:  * vim<600: noet sw=4 ts=4
  243:  */

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