xref: /csrg-svn/bin/pax/tar.h (revision 66890)
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