Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/bin/pax/tar.h
39475 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1992 Keith Muller.
5
* Copyright (c) 1992, 1993
6
* The Regents of the University of California. All rights reserved.
7
*
8
* This code is derived from software contributed to Berkeley by
9
* Keith Muller of the University of California, San Diego.
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* 2. Redistributions in binary form must reproduce the above copyright
17
* notice, this list of conditions and the following disclaimer in the
18
* documentation and/or other materials provided with the distribution.
19
* 3. Neither the name of the University nor the names of its contributors
20
* may be used to endorse or promote products derived from this software
21
* without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33
* SUCH DAMAGE.
34
*/
35
36
/*
37
* defines and data structures common to all tar formats
38
*/
39
#define CHK_LEN 8 /* length of checksum field */
40
#define TNMSZ 100 /* size of name field */
41
#ifdef _PAX_
42
#define NULLCNT 2 /* number of null blocks in trailer */
43
#define CHK_OFFSET 148 /* start of checksum field */
44
#define BLNKSUM 256L /* sum of checksum field using ' ' */
45
#endif /* _PAX_ */
46
47
/*
48
* Values used in typeflag field in all tar formats
49
* (only REGTYPE, LNKTYPE and SYMTYPE are used in old BSD tar headers)
50
*/
51
#define REGTYPE '0' /* Regular File */
52
#define AREGTYPE '\0' /* Regular File */
53
#define LNKTYPE '1' /* Link */
54
#define SYMTYPE '2' /* Symlink */
55
#define CHRTYPE '3' /* Character Special File */
56
#define BLKTYPE '4' /* Block Special File */
57
#define DIRTYPE '5' /* Directory */
58
#define FIFOTYPE '6' /* FIFO */
59
#define CONTTYPE '7' /* high perf file */
60
61
/*
62
* Mode field encoding of the different file types - values in octal
63
*/
64
#define TSUID 04000 /* Set UID on execution */
65
#define TSGID 02000 /* Set GID on execution */
66
#define TSVTX 01000 /* Reserved */
67
#define TUREAD 00400 /* Read by owner */
68
#define TUWRITE 00200 /* Write by owner */
69
#define TUEXEC 00100 /* Execute/Search by owner */
70
#define TGREAD 00040 /* Read by group */
71
#define TGWRITE 00020 /* Write by group */
72
#define TGEXEC 00010 /* Execute/Search by group */
73
#define TOREAD 00004 /* Read by other */
74
#define TOWRITE 00002 /* Write by other */
75
#define TOEXEC 00001 /* Execute/Search by other */
76
77
#ifdef _PAX_
78
/*
79
* Pad with a bit mask, much faster than doing a mod but only works on powers
80
* of 2. Macro below is for block of 512 bytes.
81
*/
82
#define TAR_PAD(x) ((512 - ((x) & 511)) & 511)
83
#endif /* _PAX_ */
84
85
/*
86
* structure of an old tar header as it appeared in BSD releases
87
*/
88
typedef struct {
89
char name[TNMSZ]; /* name of entry */
90
char mode[8]; /* mode */
91
char uid[8]; /* uid */
92
char gid[8]; /* gid */
93
char size[12]; /* size */
94
char mtime[12]; /* modification time */
95
char chksum[CHK_LEN]; /* checksum */
96
char linkflag; /* norm, hard, or sym. */
97
char linkname[TNMSZ]; /* linked to name */
98
} HD_TAR __aligned(1);
99
100
#ifdef _PAX_
101
/*
102
* -o options for BSD tar to not write directories to the archive
103
*/
104
#define TAR_NODIR "nodir"
105
#define TAR_OPTION "write_opt"
106
107
/*
108
* default device names
109
*/
110
#define DEV_0 "/dev/rmt0"
111
#define DEV_1 "/dev/rmt1"
112
#define DEV_4 "/dev/rmt4"
113
#define DEV_5 "/dev/rmt5"
114
#define DEV_7 "/dev/rmt7"
115
#define DEV_8 "/dev/rmt8"
116
#endif /* _PAX_ */
117
118
/*
119
* Data Interchange Format - Extended tar header format - POSIX 1003.1-1990
120
*/
121
#define TPFSZ 155
122
#define TMAGIC "ustar" /* ustar and a null */
123
#define TMAGLEN 6
124
#define TVERSION "00" /* 00 and no null */
125
#define TVERSLEN 2
126
127
typedef struct {
128
char name[TNMSZ]; /* name of entry */
129
char mode[8]; /* mode */
130
char uid[8]; /* uid */
131
char gid[8]; /* gid */
132
char size[12]; /* size */
133
char mtime[12]; /* modification time */
134
char chksum[CHK_LEN]; /* checksum */
135
char typeflag; /* type of file. */
136
char linkname[TNMSZ]; /* linked to name */
137
char magic[TMAGLEN]; /* magic cookie */
138
char version[TVERSLEN]; /* version */
139
char uname[32]; /* ascii owner name */
140
char gname[32]; /* ascii group name */
141
char devmajor[8]; /* major device number */
142
char devminor[8]; /* minor device number */
143
char prefix[TPFSZ]; /* linked to name */
144
} HD_USTAR __aligned(1);
145
146