1 #ifndef __PHAR_TAR_H 2 #define __PHAR_TAR_H 3 /* 4 +----------------------------------------------------------------------+ 5 | TAR archive support for Phar | 6 +----------------------------------------------------------------------+ 7 | Copyright (c) 2005-2016 The PHP Group | 8 +----------------------------------------------------------------------+ 9 | This source file is subject to version 3.01 of the PHP license, | 10 | that is bundled with this package in the file LICENSE, and is | 11 | available through the world-wide-web at the following url: | 12 | http://www.php.net/license/3_01.txt. | 13 | If you did not receive a copy of the PHP license and are unable to | 14 | obtain it through the world-wide-web, please send a note to | 15 | license@php.net so we can mail you a copy immediately. | 16 +----------------------------------------------------------------------+ 17 | Authors: Dmitry Stogov <dmitry@zend.com> | 18 | Gregory Beaver <cellog@php.net> | 19 +----------------------------------------------------------------------+ 20 */ 21 22 #ifdef PHP_WIN32 23 #pragma pack(1) 24 # define PHAR_TAR_PACK 25 #elif defined(__sgi) 26 # define PHAR_TAR_PACK 27 #elif defined(__GNUC__) 28 # define PHAR_TAR_PACK __attribute__((__packed__)) 29 #else 30 # define PHAR_TAR_PACK 31 #endif 32 33 #if defined(__sgi) 34 # pragma pack 0 35 #endif 36 /** 37 * the format of the header block for a file, in the older UNIX-compatible 38 * TAR format 39 */ 40 typedef struct _old_tar_header { /* {{{ */ 41 char name[100]; /* name of file; 42 directory is indicated by a trailing slash (/) */ 43 char mode[8]; /* file mode */ 44 char uid[8]; /* owner user ID */ 45 char gid[8]; /* owner group ID */ 46 char size[12]; /* length of file in bytes */ 47 char mtime[12]; /* modify time of file */ 48 char checksum[8]; /* checksum for header */ 49 char link; /* indicator for links; 50 1 for a linked file, 51 2 for a symbolic link, 52 0 otherwise */ 53 char linkname[100]; /* name of linked file */ 54 } PHAR_TAR_PACK old_tar_header; 55 /* }}} */ 56 57 #if defined(__sgi) 58 # pragma pack 0 59 #endif 60 /** 61 * the new USTAR header format. 62 * Note that tar can determine that the USTAR format is being used by the 63 * presence of the null-terminated string "ustar" in the magic field. 64 */ 65 typedef struct _tar_header { /* {{{ */ 66 char name[100]; /* name of file */ 67 char mode[8]; /* file mode */ 68 char uid[8]; /* owner user ID */ 69 char gid[8]; /* owner group ID */ 70 char size[12]; /* length of file in bytes */ 71 char mtime[12]; /* modify time of file */ 72 char checksum[8]; /* checksum for header */ 73 char typeflag; /* type of file 74 0 Regular file 75 1 Link to another file already archived 76 2 Symbolic link 77 3 Character special device 78 4 Block special device 79 5 Directory 80 6 FIFO special file 81 7 Reserved */ 82 char linkname[100]; /* name of linked file */ 83 char magic[6]; /* USTAR indicator */ 84 char version[2]; /* USTAR version */ 85 char uname[32]; /* owner user name */ 86 char gname[32]; /* owner group name */ 87 char devmajor[8]; /* device major number */ 88 char devminor[8]; /* device minor number */ 89 char prefix[155]; /* prefix for file name; 90 the value of the prefix field, if non-null, 91 is prefixed to the name field to allow names 92 longer then 100 characters */ 93 char padding[12]; /* unused zeroed bytes */ 94 } PHAR_TAR_PACK tar_header; 95 /* }}} */ 96 97 #ifdef PHP_WIN32 98 #pragma pack() 99 #endif 100 101 #endif /* __PHAR_TAR_H */ 102