tar.h revision 1556
1251876Speter/*-
2251876Speter * Copyright (c) 1992 Keith Muller.
3251876Speter * Copyright (c) 1992, 1993
4251876Speter *	The Regents of the University of California.  All rights reserved.
5251876Speter *
6251876Speter * This code is derived from software contributed to Berkeley by
7251876Speter * Keith Muller of the University of California, San Diego.
8251876Speter *
9251876Speter * Redistribution and use in source and binary forms, with or without
10251876Speter * modification, are permitted provided that the following conditions
11251876Speter * are met:
12251876Speter * 1. Redistributions of source code must retain the above copyright
13251876Speter *    notice, this list of conditions and the following disclaimer.
14251876Speter * 2. Redistributions in binary form must reproduce the above copyright
15251876Speter *    notice, this list of conditions and the following disclaimer in the
16251876Speter *    documentation and/or other materials provided with the distribution.
17251876Speter * 3. All advertising materials mentioning features or use of this software
18251876Speter *    must display the following acknowledgement:
19251876Speter *	This product includes software developed by the University of
20251876Speter *	California, Berkeley and its contributors.
21251876Speter * 4. Neither the name of the University nor the names of its contributors
22251876Speter *    may be used to endorse or promote products derived from this software
23251876Speter *    without specific prior written permission.
24251876Speter *
25251876Speter * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26251876Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27251876Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28251876Speter * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29251876Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30251876Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31251876Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32251876Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33251876Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34251876Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35251876Speter * SUCH DAMAGE.
36251876Speter *
37251876Speter *	@(#)tar.h	8.2 (Berkeley) 4/18/94
38251876Speter */
39251876Speter
40251876Speter/*
41251876Speter * defines and data structures common to all tar formats
42251876Speter */
43251876Speter#define CHK_LEN		8		/* length of checksum field */
44251876Speter#define TNMSZ		100		/* size of name field */
45251876Speter#ifdef _PAX_
46251876Speter#define NULLCNT		2		/* number of null blocks in trailer */
47251876Speter#define CHK_OFFSET	148		/* start of chksum field */
48251876Speter#define BLNKSUM		256L		/* sum of checksum field using ' ' */
49251876Speter#endif /* _PAX_ */
50251876Speter
51251876Speter/*
52251876Speter * Values used in typeflag field in all tar formats
53251876Speter * (only REGTYPE, LNKTYPE and SYMTYPE are used in old bsd tar headers)
54251876Speter */
55251876Speter#define	REGTYPE		'0'		/* Regular File */
56251876Speter#define	AREGTYPE	'\0'		/* Regular File */
57251876Speter#define	LNKTYPE		'1'		/* Link */
58251876Speter#define	SYMTYPE		'2'		/* Symlink */
59251876Speter#define	CHRTYPE		'3'		/* Character Special File */
60251876Speter#define	BLKTYPE		'4'		/* Block Special File */
61251876Speter#define	DIRTYPE		'5'		/* Directory */
62251876Speter#define	FIFOTYPE	'6'		/* FIFO */
63251876Speter#define	CONTTYPE	'7'		/* high perf file */
64251876Speter
65251876Speter/*
66251876Speter * Mode field encoding of the different file types - values in octal
67251876Speter */
68251876Speter#define TSUID		04000		/* Set UID on execution */
69251876Speter#define TSGID		02000		/* Set GID on execution */
70251876Speter#define TSVTX		01000		/* Reserved */
71251876Speter#define TUREAD		00400		/* Read by owner */
72251876Speter#define TUWRITE		00200		/* Write by owner */
73251876Speter#define TUEXEC		00100		/* Execute/Search by owner */
74251876Speter#define TGREAD		00040		/* Read by group */
75251876Speter#define TGWRITE		00020		/* Write by group */
76251876Speter#define TGEXEC		00010		/* Execute/Search by group */
77251876Speter#define TOREAD		00004		/* Read by other */
78251876Speter#define TOWRITE		00002		/* Write by other */
79251876Speter#define TOEXEC		00001		/* Execute/Search by other */
80251876Speter
81251876Speter#ifdef _PAX_
82251876Speter/*
83251876Speter * Pad with a bit mask, much faster than doing a mod but only works on powers
84251876Speter * of 2. Macro below is for block of 512 bytes.
85251876Speter */
86251876Speter#define TAR_PAD(x)	((512 - ((x) & 511)) & 511)
87251876Speter#endif /* _PAX_ */
88251876Speter
89251876Speter/*
90251876Speter * structure of an old tar header as it appeared in BSD releases
91251876Speter */
92251876Spetertypedef struct {
93251876Speter	char name[TNMSZ];		/* name of entry */
94251876Speter	char mode[8]; 			/* mode */
95251876Speter	char uid[8]; 			/* uid */
96251876Speter	char gid[8];			/* gid */
97251876Speter	char size[12];			/* size */
98251876Speter	char mtime[12];			/* modification time */
99251876Speter	char chksum[CHK_LEN];		/* checksum */
100251876Speter	char linkflag;			/* norm, hard, or sym. */
101251876Speter	char linkname[TNMSZ];		/* linked to name */
102251876Speter} HD_TAR;
103251876Speter
104251876Speter#ifdef _PAX_
105251876Speter/*
106251876Speter * -o options for BSD tar to not write directories to the archive
107251876Speter */
108251876Speter#define TAR_NODIR	"nodir"
109251876Speter#define TAR_OPTION	"write_opt"
110251876Speter
111251876Speter/*
112251876Speter * default device names
113251876Speter */
114251876Speter#define	DEV_0		"/dev/rmt0"
115251876Speter#define	DEV_1		"/dev/rmt1"
116251876Speter#define	DEV_4		"/dev/rmt4"
117251876Speter#define	DEV_5		"/dev/rmt5"
118251876Speter#define	DEV_7		"/dev/rmt7"
119251876Speter#define	DEV_8		"/dev/rmt8"
120251876Speter#endif /* _PAX_ */
121251876Speter
122251876Speter/*
123251876Speter * Data Interchange Format - Extended tar header format - POSIX 1003.1-1990
124251876Speter */
125251876Speter#define TPFSZ		155
126251876Speter#define	TMAGIC		"ustar"		/* ustar and a null */
127251876Speter#define	TMAGLEN		6
128251876Speter#define	TVERSION	"00"		/* 00 and no null */
129251876Speter#define	TVERSLEN	2
130251876Speter
131251876Spetertypedef struct {
132251876Speter	char name[TNMSZ];		/* name of entry */
133251876Speter	char mode[8]; 			/* mode */
134251876Speter	char uid[8]; 			/* uid */
135251876Speter	char gid[8];			/* gid */
136251876Speter	char size[12];			/* size */
137251876Speter	char mtime[12];			/* modification time */
138251876Speter	char chksum[CHK_LEN];		/* checksum */
139251876Speter	char typeflag;			/* type of file. */
140251876Speter	char linkname[TNMSZ];		/* linked to name */
141251876Speter	char magic[TMAGLEN];		/* magic cookie */
142251876Speter	char version[TVERSLEN];		/* version */
143251876Speter	char uname[32];			/* ascii owner name */
144251876Speter	char gname[32];			/* ascii group name */
145251876Speter	char devmajor[8];		/* major device number */
146251876Speter	char devminor[8];		/* minor device number */
147251876Speter	char prefix[TPFSZ];		/* linked to name */
148251876Speter} HD_USTAR;
149251876Speter