glibc (2.38)

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