157121Smuller /*- 257121Smuller * Copyright (c) 1992 Keith Muller. 357121Smuller * Copyright (c) 1992 The Regents of the University of California. 457121Smuller * All rights reserved. 557121Smuller * 657121Smuller * This code is derived from software contributed to Berkeley by 757121Smuller * Keith Muller of the University of California, San Diego. 857121Smuller * 957121Smuller * %sccs.include.redist.c% 1057121Smuller * 11*57544Smuller * @(#)tar.h 1.2 (Berkeley) 01/14/93 1257121Smuller */ 1357121Smuller 1457121Smuller /* 1557121Smuller * defines and data structures common to all tar formats 1657121Smuller */ 17*57544Smuller #define CHK_LEN 8 /* length of checksum field */ 1857121Smuller #define TNMSZ 100 /* size of name field */ 19*57544Smuller #ifdef _PAX_ 20*57544Smuller #define NULLCNT 2 /* number of null blocks in trailer */ 2157121Smuller #define CHK_OFFSET 148 /* start of chksum field */ 2257121Smuller #define BLNKSUM 256L /* sum of checksum field using ' ' */ 23*57544Smuller #endif /* _PAX_ */ 2457121Smuller 2557121Smuller /* 26*57544Smuller * Values used in typeflag field in all tar formats 27*57544Smuller * (only REGTYPE, LNKTYPE and SYMTYPE are used in old bsd tar headers) 28*57544Smuller */ 29*57544Smuller #define REGTYPE '0' /* Regular File */ 30*57544Smuller #define AREGTYPE '\0' /* Regular File */ 31*57544Smuller #define LNKTYPE '1' /* Link */ 32*57544Smuller #define SYMTYPE '2' /* Symlink */ 33*57544Smuller #define CHRTYPE '3' /* Character Special File */ 34*57544Smuller #define BLKTYPE '4' /* Block Special File */ 35*57544Smuller #define DIRTYPE '5' /* Directory */ 36*57544Smuller #define FIFOTYPE '6' /* FIFO */ 37*57544Smuller #define CONTTYPE '7' /* high perf file */ 38*57544Smuller 39*57544Smuller /* 40*57544Smuller * Mode field encoding of the different file types - values in octal 41*57544Smuller */ 42*57544Smuller #define TSUID 04000 /* Set UID on execution */ 43*57544Smuller #define TSGID 02000 /* Set GID on execution */ 44*57544Smuller #define TSVTX 01000 /* Reserved */ 45*57544Smuller #define TUREAD 00400 /* Read by owner */ 46*57544Smuller #define TUWRITE 00200 /* Write by owner */ 47*57544Smuller #define TUEXEC 00100 /* Execute/Search by owner */ 48*57544Smuller #define TGREAD 00040 /* Read by group */ 49*57544Smuller #define TGWRITE 00020 /* Write by group */ 50*57544Smuller #define TGEXEC 00010 /* Execute/Search by group */ 51*57544Smuller #define TOREAD 00004 /* Read by other */ 52*57544Smuller #define TOWRITE 00002 /* Write by other */ 53*57544Smuller #define TOEXEC 00001 /* Execute/Search by other */ 54*57544Smuller 55*57544Smuller #ifdef _PAX_ 56*57544Smuller /* 5757121Smuller * Pad with a bit mask, much faster than doing a mod but only works on powers 5857121Smuller * of 2. Macro below is for block of 512 bytes. 5957121Smuller */ 6057121Smuller #define TAR_PAD(x) ((512 - ((x) & 511)) & 511) 61*57544Smuller #endif /* _PAX_ */ 6257121Smuller 6357121Smuller /* 64*57544Smuller * structure of an old tar header as it appeared in BSD releases 6557121Smuller */ 6657121Smuller typedef struct { 6757121Smuller char name[TNMSZ]; /* name of entry */ 6857121Smuller char mode[8]; /* mode */ 6957121Smuller char uid[8]; /* uid */ 7057121Smuller char gid[8]; /* gid */ 7157121Smuller char size[12]; /* size */ 7257121Smuller char mtime[12]; /* modification time */ 73*57544Smuller char chksum[CHK_LEN]; /* checksum */ 7457121Smuller char linkflag; /* norm, hard, or sym. */ 7557121Smuller char linkname[TNMSZ]; /* linked to name */ 7657121Smuller } HD_TAR; 7757121Smuller 78*57544Smuller #ifdef _PAX_ 7957121Smuller /* 80*57544Smuller * -o options for BSD tar to not write directories to the archive 8157121Smuller */ 82*57544Smuller #define TAR_NODIR "nodir" 83*57544Smuller #define TAR_OPTION "write_opt" 84*57544Smuller #endif /* _PAX_ */ 85*57544Smuller 86*57544Smuller /* 87*57544Smuller * Data Interchange Format - Extended tar header format - POSIX 1003.1-1990 88*57544Smuller */ 8957121Smuller #define TPFSZ 155 9057121Smuller #define TMAGIC "ustar" /* ustar and a null */ 9157121Smuller #define TMAGLEN 6 9257121Smuller #define TVERSION "00" /* 00 and no null */ 9357121Smuller #define TVERSLEN 2 9457121Smuller 9557121Smuller typedef struct { 9657121Smuller char name[TNMSZ]; /* name of entry */ 9757121Smuller char mode[8]; /* mode */ 9857121Smuller char uid[8]; /* uid */ 9957121Smuller char gid[8]; /* gid */ 10057121Smuller char size[12]; /* size */ 10157121Smuller char mtime[12]; /* modification time */ 102*57544Smuller char chksum[CHK_LEN]; /* checksum */ 10357121Smuller char typeflag; /* type of file. */ 10457121Smuller char linkname[TNMSZ]; /* linked to name */ 10557121Smuller char magic[TMAGLEN]; /* magic cookie */ 10657121Smuller char version[TVERSLEN]; /* version */ 10757121Smuller char uname[32]; /* ascii owner name */ 10857121Smuller char gname[32]; /* ascii group name */ 10957121Smuller char devmajor[8]; /* major device number */ 11057121Smuller char devminor[8]; /* minor device number */ 11157121Smuller char prefix[TPFSZ]; /* linked to name */ 11257121Smuller } HD_USTAR; 113