| xf.li | bdd93d5 | 2023-05-12 07:10:14 -0700 | [diff] [blame] | 1 | /* Extended tar format from POSIX.1. | 
 | 2 |    Copyright (C) 1992-2016 Free Software Foundation, Inc. | 
 | 3 |    This file is part of the GNU C Library. | 
 | 4 |    Written by David J. MacKenzie. | 
 | 5 |  | 
 | 6 |    The GNU C Library is free software; you can redistribute it and/or | 
 | 7 |    modify it under the terms of the GNU Lesser General Public | 
 | 8 |    License as published by the Free Software Foundation; either | 
 | 9 |    version 2.1 of the License, or (at your option) any later version. | 
 | 10 |  | 
 | 11 |    The GNU C Library is distributed in the hope that it will be useful, | 
 | 12 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | 13 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 | 14 |    Lesser General Public License for more details. | 
 | 15 |  | 
 | 16 |    You should have received a copy of the GNU Lesser General Public | 
 | 17 |    License along with the GNU C Library; if not, see | 
 | 18 |    <http://www.gnu.org/licenses/>.  */ | 
 | 19 |  | 
 | 20 | #ifndef	_TAR_H | 
 | 21 | #define	_TAR_H	1 | 
 | 22 |  | 
 | 23 | #include <features.h> | 
 | 24 |  | 
 | 25 |  | 
 | 26 | /* A tar archive consists of 512-byte blocks. | 
 | 27 |    Each file in the archive has a header block followed by 0+ data blocks. | 
 | 28 |    Two blocks of NUL bytes indicate the end of the archive.  */ | 
 | 29 |  | 
 | 30 | /* The fields of header blocks: | 
 | 31 |    All strings are stored as ISO 646 (approximately ASCII) strings. | 
 | 32 |  | 
 | 33 |    Fields are numeric unless otherwise noted below; numbers are ISO 646 | 
 | 34 |    representations of octal numbers, with leading zeros as needed. | 
 | 35 |  | 
 | 36 |    linkname is only valid when typeflag==LNKTYPE.  It doesn't use prefix; | 
 | 37 |    files that are links to pathnames >100 chars long can not be stored | 
 | 38 |    in a tar archive. | 
 | 39 |  | 
 | 40 |    If typeflag=={LNKTYPE,SYMTYPE,DIRTYPE} then size must be 0. | 
 | 41 |  | 
 | 42 |    devmajor and devminor are only valid for typeflag=={BLKTYPE,CHRTYPE}. | 
 | 43 |  | 
 | 44 |    chksum contains the sum of all 512 bytes in the header block, | 
 | 45 |    treating each byte as an 8-bit unsigned value and treating the | 
 | 46 |    8 bytes of chksum as blank characters. | 
 | 47 |  | 
 | 48 |    uname and gname are used in preference to uid and gid, if those | 
 | 49 |    names exist locally. | 
 | 50 |  | 
 | 51 |    Field Name	Byte Offset	Length in Bytes	Field Type | 
 | 52 |    name		0		100		NUL-terminated if NUL fits | 
 | 53 |    mode		100		8 | 
 | 54 |    uid		108		8 | 
 | 55 |    gid		116		8 | 
 | 56 |    size		124		12 | 
 | 57 |    mtime	136		12 | 
 | 58 |    chksum	148		8 | 
 | 59 |    typeflag	156		1		see below | 
 | 60 |    linkname	157		100		NUL-terminated if NUL fits | 
 | 61 |    magic	257		6		must be TMAGIC (NUL term.) | 
 | 62 |    version	263		2		must be TVERSION | 
 | 63 |    uname	265		32		NUL-terminated | 
 | 64 |    gname	297		32		NUL-terminated | 
 | 65 |    devmajor	329		8 | 
 | 66 |    devminor	337		8 | 
 | 67 |    prefix	345		155		NUL-terminated if NUL fits | 
 | 68 |  | 
 | 69 |    If the first character of prefix is '\0', the file name is name; | 
 | 70 |    otherwise, it is prefix/name.  Files whose pathnames don't fit in that | 
 | 71 |    length can not be stored in a tar archive.  */ | 
 | 72 |  | 
 | 73 | /* The bits in mode: */ | 
 | 74 | #define TSUID	04000 | 
 | 75 | #define TSGID	02000 | 
 | 76 | #if defined __USE_XOPEN || !defined __USE_XOPEN2K | 
 | 77 | # define TSVTX	01000 | 
 | 78 | #endif | 
 | 79 | #define TUREAD	00400 | 
 | 80 | #define TUWRITE	00200 | 
 | 81 | #define TUEXEC	00100 | 
 | 82 | #define TGREAD	00040 | 
 | 83 | #define TGWRITE	00020 | 
 | 84 | #define TGEXEC	00010 | 
 | 85 | #define TOREAD	00004 | 
 | 86 | #define TOWRITE	00002 | 
 | 87 | #define TOEXEC	00001 | 
 | 88 |  | 
 | 89 | /* The values for typeflag: | 
 | 90 |    Values 'A'-'Z' are reserved for custom implementations. | 
 | 91 |    All other values are reserved for future POSIX.1 revisions.  */ | 
 | 92 |  | 
 | 93 | #define REGTYPE		'0'	/* Regular file (preferred code).  */ | 
 | 94 | #define AREGTYPE	'\0'	/* Regular file (alternate code).  */ | 
 | 95 | #define LNKTYPE		'1'	/* Hard link.  */ | 
 | 96 | #define SYMTYPE		'2'	/* Symbolic link (hard if not supported).  */ | 
 | 97 | #define CHRTYPE		'3'	/* Character special.  */ | 
 | 98 | #define BLKTYPE		'4'	/* Block special.  */ | 
 | 99 | #define DIRTYPE		'5'	/* Directory.  */ | 
 | 100 | #define FIFOTYPE	'6'	/* Named pipe.  */ | 
 | 101 | #define CONTTYPE	'7'	/* Contiguous file */ | 
 | 102 |  /* (regular file if not supported).  */ | 
 | 103 |  | 
 | 104 | /* Contents of magic field and its length.  */ | 
 | 105 | #define TMAGIC	"ustar" | 
 | 106 | #define TMAGLEN	6 | 
 | 107 |  | 
 | 108 | /* Contents of the version field and its length.  */ | 
 | 109 | #define TVERSION	"00" | 
 | 110 | #define TVERSLEN	2 | 
 | 111 |  | 
 | 112 | #endif /* tar.h */ |