/usr/include/zzip/format.h is in libzzip-dev 0.13.62-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | /*
* Author:
* Guido Draheim <guidod@gmx.de>
*
* Copyright (c) 2000,2001,2002,2003 Guido Draheim
* All rights reserved
* use under the restrictions of the
* Lesser GNU General Public License
* or alternatively the restrictions
* of the Mozilla Public License 1.1
*
* The information was taken from appnote-981119-iz.zip
* at http://www.freesoftware.com/pub/infozip/doc/
* which in turn is based on PKWARE's appnote.txt
* (newer link: ftp://ftp.info-zip.org/pub/infozip/doc/)
*/
#ifndef _ZZIP_FORMAT_H /* zzipformat.h */
#define _ZZIP_FORMAT_H
#include <zzip/types.h>
#include <zzip/__hints.h>
/* we have ICO C 9X types defined */
/*
* Overall zipfile format
* [local file header + file data stream + checksum descriptor] ...
* ... [disk central directory] [disk trailer record]
*/
# ifdef _MSC_VER
# pragma pack(push, 1)
# endif
struct zzip_version
{
zzip_byte_t version[1];
zzip_byte_t ostype[1];
} ZZIP_GNUC_PACKED;
struct zzip_dostime
{
zzip_byte_t time[2];
zzip_byte_t date[2];
} ZZIP_GNUC_PACKED;
#ifdef ZZIP_NEED_PACKED
/* if your compiler does interesting things about struct packing... */
typedef zzip_byte_t zzip_version_t[2];
typedef zzip_byte_t zzip_dostime_t[4];
#else
typedef struct zzip_version zzip_version_t;
typedef struct zzip_dostime zzip_dostime_t;
#endif
#define ZZIP_CHECKMAGIC(__p,__A,__B,__C,__D) \
( (((zzip_byte_t*)(__p))[0]==(__A)) && \
(((zzip_byte_t*)(__p))[1]==(__B)) && \
(((zzip_byte_t*)(__p))[2]==(__C)) && \
(((zzip_byte_t*)(__p))[3]==(__D)) )
/* A. Local file header */
struct zzip_file_header
{
# define ZZIP_FILE_HEADER_MAGIC 0x04034b50
# define ZZIP_FILE_HEADER_CHECKMAGIC(__p) ZZIP_CHECKMAGIC(__p,'P','K','\3','\4')
zzip_byte_t z_magic[4]; /* local file header signature (0x04034b50) */
zzip_version_t z_extract; /* version needed to extract */
zzip_byte_t z_flags[2]; /* general purpose bit flag */
zzip_byte_t z_compr[2]; /* compression method */
zzip_dostime_t z_dostime; /* last mod file time (dos format) */
zzip_byte_t z_crc32[4]; /* crc-32 */
zzip_byte_t z_csize[4]; /* compressed size */
zzip_byte_t z_usize[4]; /* uncompressed size */
zzip_byte_t z_namlen[2]; /* filename length (null if stdin) */
zzip_byte_t z_extras[2]; /* extra field length */
/* followed by filename (of variable size) */
/* followed by extra field (of variable size) */
} ZZIP_GNUC_PACKED;
#define zzip_file_header_headerlength (4+2+2+2+4+4+4+4+2+2)
/* B. data descriptor
* the data descriptor exists only if bit 3 of z_flags is set. It is byte aligned
* and immediately follows the last byte of compressed data. It is only used if
* the output media of the compressor was not seekable, eg. standard output.
*/
struct zzip_file_trailer
{
# define ZZIP_FILE_TRAILER_MAGIC 0x08074B50
# define ZZIP_FILE_TRAILER_CHECKMAGIC(__p) ZZIP_CHECKMAGIC(__p,'P','K','\7','\8')
zzip_byte_t z_magic[4]; /* data descriptor signature (0x08074b50) */
zzip_byte_t z_crc32[4]; /* crc-32 */
zzip_byte_t z_csize[4]; /* compressed size */
zzip_byte_t z_usize[4]; /* uncompressed size */
} ZZIP_GNUC_PACKED;
#define zzip_file_trailer_headerlength (4+4+4+4)
/* C. central directory structure:
[file header] . . . end of central dir record
*/
/* directory file header
* - a single entry including filename, extras and comment may not exceed 64k.
*/
struct zzip_disk_entry
{
# define ZZIP_DISK_ENTRY_MAGIC 0x02014b50
# define ZZIP_DISK_ENTRY_CHECKMAGIC(__p) ZZIP_CHECKMAGIC(__p,'P','K','\1','\2')
zzip_byte_t z_magic[4]; /* central file header signature (0x02014b50) */
zzip_version_t z_encoder; /* version made by */
zzip_version_t z_extract; /* version need to extract */
zzip_byte_t z_flags[2]; /* general purpose bit flag */
zzip_byte_t z_compr[2]; /* compression method */
zzip_dostime_t z_dostime; /* last mod file time&date (dos format) */
zzip_byte_t z_crc32[4]; /* crc-32 */
zzip_byte_t z_csize[4]; /* compressed size */
zzip_byte_t z_usize[4]; /* uncompressed size */
zzip_byte_t z_namlen[2]; /* filename length (null if stdin) */
zzip_byte_t z_extras[2]; /* extra field length */
zzip_byte_t z_comment[2]; /* file comment length */
zzip_byte_t z_diskstart[2]; /* disk number of start (if spanning zip over multiple disks) */
zzip_byte_t z_filetype[2]; /* internal file attributes, bit0 = ascii */
zzip_byte_t z_filemode[4]; /* extrnal file attributes, eg. msdos attrib byte */
zzip_byte_t z_offset[4]; /* relative offset of local file header, seekval if singledisk */
/* followed by filename (of variable size) */
/* followed by extra field (of variable size) */
/* followed by file comment (of variable size) */
} ZZIP_GNUC_PACKED;
#define zzip_disk_entry_headerlength (4+2+2+2+2+4+4+4+4+2+2+2+2+2+4+4)
struct zzip_root_dirent
{ /* the old name of the structure above */
# define ZZIP_ROOT_DIRENT_MAGIC 0x02014b50
# define ZZIP_ROOT_DIRENT_CHECKMAGIC(__p) ZZIP_DISK_ENTRY_CHECKMAGIC(__p)
zzip_byte_t z_magic[4];
zzip_version_t z_encoder;
zzip_version_t z_extract;
zzip_byte_t z_flags[2];
zzip_byte_t z_compr[2];
zzip_dostime_t z_dostime;
zzip_byte_t z_crc32[4];
zzip_byte_t z_csize[4];
zzip_byte_t z_usize[4];
zzip_byte_t z_namlen[2];
zzip_byte_t z_extras[2];
zzip_byte_t z_comment[2];
zzip_byte_t z_diskstart[2];
zzip_byte_t z_filetype[2];
zzip_byte_t z_filemode[4];
zzip_byte_t z_off[4];
} ZZIP_GNUC_PACKED;
/* end of central dir record */
struct zzip_disk_trailer
{
# define ZZIP_DISK_TRAILER_MAGIC 0x06054b50
# define ZZIP_DISK_TRAILER_CHECKMAGIC(__p) ZZIP_CHECKMAGIC(__p,'P','K','\5','\6')
zzip_byte_t z_magic[4]; /* end of central dir signature (0x06054b50) */
zzip_byte_t z_disk[2]; /* number of this disk */
zzip_byte_t z_finaldisk[2]; /* number of the disk with the start of the central dir */
zzip_byte_t z_entries[2]; /* total number of entries in the central dir on this disk */
zzip_byte_t z_finalentries[2]; /* total number of entries in the central dir */
zzip_byte_t z_rootsize[4]; /* size of the central directory */
zzip_byte_t z_rootseek[4]; /* offset of start of central directory with respect to *
* the starting disk number */
zzip_byte_t z_comment[2]; /* zipfile comment length */
/* followed by zipfile comment (of variable size) */
} ZZIP_GNUC_PACKED;
#define zzip_disk_trailer_headerlength (4+2+2+2+2+4+4+2)
/* extra field should be type + size + data + type + size + data ... */
struct zzip_extra_block
{ /* fetch.h macros do not need this struct */
zzip_byte_t z_datatype[2]; /* as input type - a mere <char*> is okay */
zzip_byte_t z_datasize[2]; /* being returned by xx_to_extras usually */
} ZZIP_GNUC_PACKED;
#define zzip_extra_block_headerlength (2+2)
/* Zip64 end of central dir record */
struct zzip_disk64_trailer
{
# define ZZIP_DISK64_TRAILER_MAGIC 0x06064b50
# define ZZIP_DISK64_TRAILER_CHECKMAGIC(__p) ZZIP_CHECKMAGIC(__p,'P','K','\6','\6')
zzip_byte_t z_magic[4]; /* end of central dir signature (0x06054b50) */
zzip_byte_t z_size[8]; /* size of this central directory record */
zzip_version_t z_encoder; /* version made by */
zzip_version_t z_extract; /* version need to extract */
zzip_byte_t z_disk[4]; /* number of this disk */
zzip_byte_t z_finaldisk[4]; /* number of the disk with the start of the central dir */
zzip_byte_t z_entries[8]; /* total number of entries in the central dir on this disk */
zzip_byte_t z_finalentries[8]; /* total number of entries in the central dir */
zzip_byte_t z_rootsize[8]; /* size of the central directory */
zzip_byte_t z_rootseek[8]; /* offset of start of central directory with respect to *
* the starting disk number */
/* followed by zip64 extensible data sector (of variable size) */
} ZZIP_GNUC_PACKED;
#define zzip_disk64_trailer_headerlength (4+8+2+2+4+4+8+8+8+8)
/* z_flags */
#define ZZIP_IS_ENCRYPTED(p) ((*(zzip_byte_t*)p)&1)
#define ZZIP_IS_COMPRLEVEL(p) (((*(zzip_byte_t*)p)>>1)&3)
#define ZZIP_IS_STREAMED(p) (((*(zzip_byte_t*)p)>>3)&1)
#define ZZIP_IS_PATCHED(p) (((*(zzip_byte_t*)p)>>5)&1)
/* z_compr */
#define ZZIP_IS_STORED 0
#define ZZIP_IS_SHRUNK 1
#define ZZIP_IS_REDUCEDx1 2
#define ZZIP_IS_REDUCEDx2 3
#define ZZIP_IS_REDUCEDx3 4
#define ZZIP_IS_REDUCEDx4 5
#define ZZIP_IS_IMPLODED 6
#define ZZIP_IS_TOKENIZED 7
#define ZZIP_IS_DEFLATED 8
#define ZZIP_IS_DEFLATED_BETTER 9
#define ZZIP_IS_IMPLODED_BETTER 10
/* deflated comprlevel */
#define ZZIP_DEFLATED_STD_COMPR 0
#define ZZIP_DEFLATED_MAX_COMPR 1
#define ZZIP_DEFLATED_LOW_COMPR 2
#define ZZIP_DEFLATED_MIN_COMPR 3
# ifdef _MSC_VER
# pragma pack(pop)
# endif
#endif /* _ZZIPFORMAT_H */
|