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