157121Smuller /*- 257121Smuller * Copyright (c) 1992 Keith Muller. 360676Sbostic * Copyright (c) 1992, 1993 460676Sbostic * 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*66890Sbostic * @(#)tar.h 8.2 (Berkeley) 04/18/94 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" 84*66890Sbostic 85*66890Sbostic /* 86*66890Sbostic * default device names 87*66890Sbostic */ 88*66890Sbostic #define DEV_0 "/dev/rmt0" 89*66890Sbostic #define DEV_1 "/dev/rmt1" 90*66890Sbostic #define DEV_4 "/dev/rmt4" 91*66890Sbostic #define DEV_5 "/dev/rmt5" 92*66890Sbostic #define DEV_7 "/dev/rmt7" 93*66890Sbostic #define DEV_8 "/dev/rmt8" 9457544Smuller #endif /* _PAX_ */ 9557544Smuller 9657544Smuller /* 9757544Smuller * Data Interchange Format - Extended tar header format - POSIX 1003.1-1990 9857544Smuller */ 9957121Smuller #define TPFSZ 155 10057121Smuller #define TMAGIC "ustar" /* ustar and a null */ 10157121Smuller #define TMAGLEN 6 10257121Smuller #define TVERSION "00" /* 00 and no null */ 10357121Smuller #define TVERSLEN 2 10457121Smuller 10557121Smuller typedef struct { 10657121Smuller char name[TNMSZ]; /* name of entry */ 10757121Smuller char mode[8]; /* mode */ 10857121Smuller char uid[8]; /* uid */ 10957121Smuller char gid[8]; /* gid */ 11057121Smuller char size[12]; /* size */ 11157121Smuller char mtime[12]; /* modification time */ 11257544Smuller char chksum[CHK_LEN]; /* checksum */ 11357121Smuller char typeflag; /* type of file. */ 11457121Smuller char linkname[TNMSZ]; /* linked to name */ 11557121Smuller char magic[TMAGLEN]; /* magic cookie */ 11657121Smuller char version[TVERSLEN]; /* version */ 11757121Smuller char uname[32]; /* ascii owner name */ 11857121Smuller char gname[32]; /* ascii group name */ 11957121Smuller char devmajor[8]; /* major device number */ 12057121Smuller char devminor[8]; /* minor device number */ 12157121Smuller char prefix[TPFSZ]; /* linked to name */ 12257121Smuller } HD_USTAR; 123