xref: /plan9-contrib/sys/src/cmd/tarsplit/tar.h (revision ad6ca847b1a6a504acb0003cd6c5c6d92687369b)
1 /* tar archive format definitions and functions */
2 
3 #define islink(lf)	(isreallink(lf) || issymlink(lf))
4 #define isreallink(lf)	((lf) == Lflink)
5 #define issymlink(lf)	((lf) == Lfsymlink1 || (lf) == Lfsymlink2)
6 
7 #define HOWMANY(a, size)	(((a) + (size) - 1) / (size))
8 #define ROUNDUP(a, size)	(HOWMANY(a, size) * (size))
9 
10 #define TAPEBLKS(bytes)		HOWMANY(bytes, Tblock)
11 
12 enum {
13 	Tblock = 512u,
14 	Namesz = 100,
15 
16 	/* link flags */
17 	Lfplain1 = '\0',
18 	Lfplain2 = '0',
19 	Lflink,
20 	Lfsymlink1,
21 	Lfchr,
22 	Lfblk,
23 	Lfdir,
24 	Lffifo,
25 	Lfcontig,
26 	Lfsymlink2 = 's',
27 };
28 
29 typedef struct {
30 	char	name[Namesz];
31 	char	mode[8];
32 	char	uid[8];
33 	char	gid[8];
34 	char	size[12];
35 	char	mtime[12];
36 	char	chksum[8];
37 	char	linkflag;
38 	char	linkname[Namesz];
39 } Header;
40 
41 typedef union {
42 	uchar	dummy[Tblock];
43 	Header;
44 } Hblock;
45 
46 /* tarsub.c */
47 char *thisnm, *lastnm;
48 
49 unsigned checksum(Hblock *hp);
50 int	closeout(int outf, char *, int prflag);
51 int	getdir(Hblock *, int in, vlong *);
52 ulong	otoi(char *s);
53 void	newarch(void);
54 uvlong	passtar(Hblock *hp, int in, int outf, vlong bytes);
55 void	putempty(int out);
56 void	readtar(int in, char *buffer, long size);
57 uvlong	writetar(int outf, char *buffer, ulong size);
58