xref: /csrg-svn/bin/pax/cpio.h (revision 57116)
1*57116Smuller /*-
2*57116Smuller  * Copyright (c) 1992 Keith Muller.
3*57116Smuller  * Copyright (c) 1992 The Regents of the University of California.
4*57116Smuller  * All rights reserved.
5*57116Smuller  *
6*57116Smuller  * This code is derived from software contributed to Berkeley by
7*57116Smuller  * Keith Muller of the University of California, San Diego.
8*57116Smuller  *
9*57116Smuller  * %sccs.include.redist.c%
10*57116Smuller  *
11*57116Smuller  *	@(#)cpio.h	1.1 (Berkeley) 12/13/92
12*57116Smuller  */
13*57116Smuller 
14*57116Smuller /*
15*57116Smuller  * Defines common to all versions of cpio
16*57116Smuller  */
17*57116Smuller #define TRAILER		"TRAILER!!!"	/* name in last archive record */
18*57116Smuller 
19*57116Smuller /*
20*57116Smuller  * Header encoding of the different file types
21*57116Smuller  */
22*57116Smuller #define	C_ISDIR		 040000		/* Directory */
23*57116Smuller #define	C_ISFIFO	 010000		/* FIFO */
24*57116Smuller #define	C_ISREG		0100000		/* Regular file */
25*57116Smuller #define	C_ISBLK		 060000		/* Block special file */
26*57116Smuller #define	C_ISCHR		 020000		/* Character special file */
27*57116Smuller #define	C_ISCTG		0110000		/* Reserved for contiguous files */
28*57116Smuller #define	C_ISLNK		0120000		/* Reserved for symbolic links */
29*57116Smuller #define	C_ISOCK		0140000		/* Reserved for sockets */
30*57116Smuller #define C_IFMT		0170000		/* type of file */
31*57116Smuller 
32*57116Smuller /*
33*57116Smuller  * Data Interchange Format - Extended cpio Format - POSIX 1003.1-1990
34*57116Smuller  */
35*57116Smuller typedef struct {
36*57116Smuller 	char	c_magic[6];		/* magic cookie */
37*57116Smuller 	char	c_dev[6];		/* device number */
38*57116Smuller 	char	c_ino[6];		/* inode number */
39*57116Smuller 	char	c_mode[6];		/* file type/access */
40*57116Smuller 	char	c_uid[6];		/* owners uid */
41*57116Smuller 	char	c_gid[6];		/* owners gid */
42*57116Smuller 	char	c_nlink[6];		/* # of links at archive creation */
43*57116Smuller 	char	c_rdev[6];		/* block/char major/minor # */
44*57116Smuller 	char	c_mtime[11];		/* modification time */
45*57116Smuller 	char	c_namesize[6];		/* length of pathname */
46*57116Smuller 	char	c_filesize[11];		/* length of file in bytes */
47*57116Smuller } HD_CPIO;
48*57116Smuller 
49*57116Smuller #define	MAGIC		070707		/* transportable archive id */
50*57116Smuller #define	AMAGIC		"070707"	/* ascii string of above */
51*57116Smuller #define CPIO_MASK	0x3ffff		/* bits valid in the dev/ino fields */
52*57116Smuller 					/* used for dev/inode remaps */
53*57116Smuller 
54*57116Smuller /*
55*57116Smuller  * Binary cpio structure
56*57116Smuller  *
57*57116Smuller  * CAUTION! CAUTION! CAUTION!
58*57116Smuller  * Each field really represents a 16 bit short (NOT ASCII). We deal with it as
59*57116Smuller  * an array of chars in an attempt to improve portability!!
60*57116Smuller  */
61*57116Smuller typedef struct {
62*57116Smuller 	u_char	h_magic[2];
63*57116Smuller 	u_char	h_dev[2];
64*57116Smuller 	u_char	h_ino[2];
65*57116Smuller 	u_char	h_mode[2];
66*57116Smuller 	u_char	h_uid[2];
67*57116Smuller 	u_char	h_gid[2];
68*57116Smuller 	u_char	h_nlink[2];
69*57116Smuller 	u_char	h_rdev[2];
70*57116Smuller 	u_char	h_mtime_1[2];
71*57116Smuller 	u_char	h_mtime_2[2];
72*57116Smuller 	u_char	h_namesize[2];
73*57116Smuller 	u_char	h_filesize_1[2];
74*57116Smuller 	u_char	h_filesize_2[2];
75*57116Smuller } HD_BCPIO;
76*57116Smuller 
77*57116Smuller /*
78*57116Smuller  * extraction and creation macros
79*57116Smuller  */
80*57116Smuller #define SHRT_EXT(ch)	((((unsigned)(ch)[0])<<8) | (((unsigned)(ch)[1])&0xff))
81*57116Smuller #define RSHRT_EXT(ch)	((((unsigned)(ch)[1])<<8) | (((unsigned)(ch)[0])&0xff))
82*57116Smuller #define CHR_WR_0(val)	((char)(((val) >> 24) & 0xff))
83*57116Smuller #define CHR_WR_1(val)	((char)(((val) >> 16) & 0xff))
84*57116Smuller #define CHR_WR_2(val)	((char)(((val) >> 8) & 0xff))
85*57116Smuller #define CHR_WR_3(val)	((char)((val) & 0xff))
86*57116Smuller 
87*57116Smuller /*
88*57116Smuller  * masks and pads
89*57116Smuller  */
90*57116Smuller #define BCPIO_PAD(x)	((2 - ((x) & 1)) & 1)	/* pad to next 2 byte word */
91*57116Smuller #define BCPIO_MASK	0xffff			/* mask for dev/ino fields */
92*57116Smuller 
93*57116Smuller /*
94*57116Smuller  * System VR4 cpio structure
95*57116Smuller  */
96*57116Smuller typedef struct {
97*57116Smuller 	char	c_magic[6];		/* magic cookie */
98*57116Smuller 	char	c_ino[8];		/* inode number */
99*57116Smuller 	char	c_mode[8];		/* file type/access */
100*57116Smuller 	char	c_uid[8];		/* owners uid */
101*57116Smuller 	char	c_gid[8];		/* owners gid */
102*57116Smuller 	char	c_nlink[8];		/* # of links at archive creation */
103*57116Smuller 	char	c_mtime[8];		/* modification time */
104*57116Smuller 	char	c_filesize[8];		/* length of file in bytes */
105*57116Smuller 	char	c_maj[8];		/* block/char major # */
106*57116Smuller 	char	c_min[8];		/* block/char minor # */
107*57116Smuller 	char	c_rmaj[8];		/* special file major # */
108*57116Smuller 	char	c_rmin[8];		/* special file minor # */
109*57116Smuller 	char	c_namesize[8];		/* length of pathname */
110*57116Smuller 	char	c_chksum[8];		/* 0 OR CRC of bytes in FILE */
111*57116Smuller } HD_VCPIO;
112*57116Smuller 
113*57116Smuller #define	VMAGIC		070701		/* sVr4 new portable archive id */
114*57116Smuller #define	AVMAGIC		"070701"	/* ascii string of above */
115*57116Smuller #define	VCMAGIC		070702		/* sVr4 new portable archive id CRC */
116*57116Smuller #define	AVCMAGIC	"070702"	/* ascii string of above */
117*57116Smuller #define VCPIO_PAD(x)	((4 - ((x) & 3)) & 3)	/*pad to next 4 byte word */
118*57116Smuller #define VCPIO_MASK	0xffffffff	/* mask for dev/ino fields */
119