157121Smuller /*- 257121Smuller * Copyright (c) 1992 Keith Muller. 3*60676Sbostic * Copyright (c) 1992, 1993 4*60676Sbostic * The Regents of the University of California. 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*60676Sbostic * @(#)tar.h 8.1 (Berkeley) 05/31/93 1257121Smuller */ 1357121Smuller 1457121Smuller /* 1557121Smuller * defines and data structures common to all tar formats 1657121Smuller */ 1757544Smuller #define CHK_LEN 8 /* length of checksum field */ 1857121Smuller #define TNMSZ 100 /* size of name field */ 1957544Smuller #ifdef _PAX_ 2057544Smuller #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 ' ' */ 2357544Smuller #endif /* _PAX_ */ 2457121Smuller 2557121Smuller /* 2657544Smuller * Values used in typeflag field in all tar formats 2757544Smuller * (only REGTYPE, LNKTYPE and SYMTYPE are used in old bsd tar headers) 2857544Smuller */ 2957544Smuller #define REGTYPE '0' /* Regular File */ 3057544Smuller #define AREGTYPE '\0' /* Regular File */ 3157544Smuller #define LNKTYPE '1' /* Link */ 3257544Smuller #define SYMTYPE '2' /* Symlink */ 3357544Smuller #define CHRTYPE '3' /* Character Special File */ 3457544Smuller #define BLKTYPE '4' /* Block Special File */ 3557544Smuller #define DIRTYPE '5' /* Directory */ 3657544Smuller #define FIFOTYPE '6' /* FIFO */ 3757544Smuller #define CONTTYPE '7' /* high perf file */ 3857544Smuller 3957544Smuller /* 4057544Smuller * Mode field encoding of the different file types - values in octal 4157544Smuller */ 4257544Smuller #define TSUID 04000 /* Set UID on execution */ 4357544Smuller #define TSGID 02000 /* Set GID on execution */ 4457544Smuller #define TSVTX 01000 /* Reserved */ 4557544Smuller #define TUREAD 00400 /* Read by owner */ 4657544Smuller #define TUWRITE 00200 /* Write by owner */ 4757544Smuller #define TUEXEC 00100 /* Execute/Search by owner */ 4857544Smuller #define TGREAD 00040 /* Read by group */ 4957544Smuller #define TGWRITE 00020 /* Write by group */ 5057544Smuller #define TGEXEC 00010 /* Execute/Search by group */ 5157544Smuller #define TOREAD 00004 /* Read by other */ 5257544Smuller #define TOWRITE 00002 /* Write by other */ 5357544Smuller #define TOEXEC 00001 /* Execute/Search by other */ 5457544Smuller 5557544Smuller #ifdef _PAX_ 5657544Smuller /* 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) 6157544Smuller #endif /* _PAX_ */ 6257121Smuller 6357121Smuller /* 6457544Smuller * 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 */ 7357544Smuller char chksum[CHK_LEN]; /* checksum */ 7457121Smuller char linkflag; /* norm, hard, or sym. */ 7557121Smuller char linkname[TNMSZ]; /* linked to name */ 7657121Smuller } HD_TAR; 7757121Smuller 7857544Smuller #ifdef _PAX_ 7957121Smuller /* 8057544Smuller * -o options for BSD tar to not write directories to the archive 8157121Smuller */ 8257544Smuller #define TAR_NODIR "nodir" 8357544Smuller #define TAR_OPTION "write_opt" 8457544Smuller #endif /* _PAX_ */ 8557544Smuller 8657544Smuller /* 8757544Smuller * Data Interchange Format - Extended tar header format - POSIX 1003.1-1990 8857544Smuller */ 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 */ 10257544Smuller 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