1 /* 2 +----------------------------------------------------------------------+ 3 | phar php single-file executable PHP extension | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 2006-2016 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$ */ 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 */ 244