php-src/ext/phar/tar.h
2014-01-03 11:06:16 +08:00

102 lines
3.9 KiB
C

#ifndef __PHAR_TAR_H
#define __PHAR_TAR_H
/*
+----------------------------------------------------------------------+
| TAR archive support for Phar |
+----------------------------------------------------------------------+
| Copyright (c) 2005-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Dmitry Stogov <dmitry@zend.com> |
| Gregory Beaver <cellog@php.net> |
+----------------------------------------------------------------------+
*/
#ifdef PHP_WIN32
#pragma pack(1)
# define PHAR_TAR_PACK
#elif defined(__sgi)
# define PHAR_TAR_PACK
#elif defined(__GNUC__)
# define PHAR_TAR_PACK __attribute__((__packed__))
#else
# define PHAR_TAR_PACK
#endif
#if defined(__sgi)
# pragma pack 0
#endif
/**
* the format of the header block for a file, in the older UNIX-compatible
* TAR format
*/
typedef struct _old_tar_header { /* {{{ */
char name[100]; /* name of file;
directory is indicated by a trailing slash (/) */
char mode[8]; /* file mode */
char uid[8]; /* owner user ID */
char gid[8]; /* owner group ID */
char size[12]; /* length of file in bytes */
char mtime[12]; /* modify time of file */
char checksum[8]; /* checksum for header */
char link; /* indicator for links;
1 for a linked file,
2 for a symbolic link,
0 otherwise */
char linkname[100]; /* name of linked file */
} PHAR_TAR_PACK old_tar_header;
/* }}} */
#if defined(__sgi)
# pragma pack 0
#endif
/**
* the new USTAR header format.
* Note that tar can determine that the USTAR format is being used by the
* presence of the null-terminated string "ustar" in the magic field.
*/
typedef struct _tar_header { /* {{{ */
char name[100]; /* name of file */
char mode[8]; /* file mode */
char uid[8]; /* owner user ID */
char gid[8]; /* owner group ID */
char size[12]; /* length of file in bytes */
char mtime[12]; /* modify time of file */
char checksum[8]; /* checksum for header */
char typeflag; /* type of file
0 Regular file
1 Link to another file already archived
2 Symbolic link
3 Character special device
4 Block special device
5 Directory
6 FIFO special file
7 Reserved */
char linkname[100]; /* name of linked file */
char magic[6]; /* USTAR indicator */
char version[2]; /* USTAR version */
char uname[32]; /* owner user name */
char gname[32]; /* owner group name */
char devmajor[8]; /* device major number */
char devminor[8]; /* device minor number */
char prefix[155]; /* prefix for file name;
the value of the prefix field, if non-null,
is prefixed to the name field to allow names
longer then 100 characters */
char padding[12]; /* unused zeroed bytes */
} PHAR_TAR_PACK tar_header;
/* }}} */
#ifdef PHP_WIN32
#pragma pack()
#endif
#endif /* __PHAR_TAR_H */