xref: /PHP-7.4/ext/phar/tar.h (revision c245898b)
1 #ifndef __PHAR_TAR_H
2 #define __PHAR_TAR_H
3 /*
4   +----------------------------------------------------------------------+
5   | TAR archive support for Phar                                         |
6   +----------------------------------------------------------------------+
7   | Copyright (c) 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@php.net>                              |
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