xref: /csrg-svn/bin/pax/tar.h (revision 57121)
1*57121Smuller /*-
2*57121Smuller  * Copyright (c) 1992 Keith Muller.
3*57121Smuller  * Copyright (c) 1992 The Regents of the University of California.
4*57121Smuller  * All rights reserved.
5*57121Smuller  *
6*57121Smuller  * This code is derived from software contributed to Berkeley by
7*57121Smuller  * Keith Muller of the University of California, San Diego.
8*57121Smuller  *
9*57121Smuller  * %sccs.include.redist.c%
10*57121Smuller  *
11*57121Smuller  *	@(#)tar.h	1.1 (Berkeley) 12/13/92
12*57121Smuller  */
13*57121Smuller 
14*57121Smuller /*
15*57121Smuller  * defines and data structures common to all tar formats
16*57121Smuller  */
17*57121Smuller #define NULLCNT		2		/* number of null blks in trailer */
18*57121Smuller #define TNMSZ		100		/* size of name field */
19*57121Smuller #define CHK_OFFSET	148		/* start of chksum field */
20*57121Smuller #define CHK_LEN		8		/* length of checksum field */
21*57121Smuller #define BLNKSUM		256L		/* sum of checksum field using ' ' */
22*57121Smuller 
23*57121Smuller /*
24*57121Smuller  * Pad with a bit mask, much faster than doing a mod but only works on powers
25*57121Smuller  * of 2. Macro below is for block of 512 bytes.
26*57121Smuller  */
27*57121Smuller #define TAR_PAD(x)	((512 - ((x) & 511)) & 511)
28*57121Smuller 
29*57121Smuller /*
30*57121Smuller  * -o options for telling tar to not write directories to the archive
31*57121Smuller  */
32*57121Smuller #define TAR_NODIR	"nodir"
33*57121Smuller #define TAR_OPTION	"write_opt"
34*57121Smuller 
35*57121Smuller /*
36*57121Smuller  * structure of an old tar header as appeared in BSD releases
37*57121Smuller  */
38*57121Smuller typedef struct {
39*57121Smuller 	char name[TNMSZ];		/* name of entry */
40*57121Smuller 	char mode[8]; 			/* mode */
41*57121Smuller 	char uid[8]; 			/* uid */
42*57121Smuller 	char gid[8];			/* gid */
43*57121Smuller 	char size[12];			/* size */
44*57121Smuller 	char mtime[12];			/* modification time */
45*57121Smuller 	char chksum[8];			/* checksum */
46*57121Smuller 	char linkflag;			/* norm, hard, or sym. */
47*57121Smuller 	char linkname[TNMSZ];		/* linked to name */
48*57121Smuller } HD_TAR;
49*57121Smuller 
50*57121Smuller /*
51*57121Smuller  * Data Interchange Format - Extended tar Format - POSIX 1003.1-1990
52*57121Smuller  */
53*57121Smuller #define TPFSZ		155
54*57121Smuller #define	TMAGIC		"ustar"		/* ustar and a null */
55*57121Smuller #define	TMAGLEN		6
56*57121Smuller #define	TVERSION	"00"		/* 00 and no null */
57*57121Smuller #define	TVERSLEN	2
58*57121Smuller 
59*57121Smuller typedef struct {
60*57121Smuller 	char name[TNMSZ];		/* name of entry */
61*57121Smuller 	char mode[8]; 			/* mode */
62*57121Smuller 	char uid[8]; 			/* uid */
63*57121Smuller 	char gid[8];			/* gid */
64*57121Smuller 	char size[12];			/* size */
65*57121Smuller 	char mtime[12];			/* modification time */
66*57121Smuller 	char chksum[8];			/* checksum */
67*57121Smuller 	char typeflag;			/* type of file. */
68*57121Smuller 	char linkname[TNMSZ];		/* linked to name */
69*57121Smuller 	char magic[TMAGLEN];		/* magic cookie */
70*57121Smuller 	char version[TVERSLEN];		/* version */
71*57121Smuller 	char uname[32];			/* ascii owner name */
72*57121Smuller 	char gname[32];			/* ascii group name */
73*57121Smuller 	char devmajor[8];		/* major device number */
74*57121Smuller 	char devminor[8];		/* minor device number */
75*57121Smuller 	char prefix[TPFSZ];		/* linked to name */
76*57121Smuller } HD_USTAR;
77*57121Smuller 
78*57121Smuller /*
79*57121Smuller  * Values used in typeflag field
80*57121Smuller  * (only REGTYPE, LNKTYPE and SYMTYPE are used in old tar headers)
81*57121Smuller  */
82*57121Smuller #define	REGTYPE		'0'		/* Regular File */
83*57121Smuller #define	AREGTYPE	'\0'		/* Regular File */
84*57121Smuller #define	LNKTYPE		'1'		/* Link */
85*57121Smuller #define	SYMTYPE		'2'		/* Symlink */
86*57121Smuller #define	CHRTYPE		'3'		/* Character Special File */
87*57121Smuller #define	BLKTYPE		'4'		/* Block Special File */
88*57121Smuller #define	DIRTYPE		'5'		/* Directory */
89*57121Smuller #define	FIFOTYPE	'6'		/* FIFO */
90*57121Smuller #define	CONTTYPE	'7'		/* high perf file */
91