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