Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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);