cpio.h revision 22988
1241823Smarcel/*-
2242710Ssjg * Copyright (c) 1992 Keith Muller.
3242710Ssjg * Copyright (c) 1992, 1993
4242710Ssjg *	The Regents of the University of California.  All rights reserved.
5242710Ssjg *
6242710Ssjg * This code is derived from software contributed to Berkeley by
7242710Ssjg * Keith Muller of the University of California, San Diego.
8242710Ssjg *
9242710Ssjg * Redistribution and use in source and binary forms, with or without
10242710Ssjg * modification, are permitted provided that the following conditions
11242710Ssjg * are met:
12242710Ssjg * 1. Redistributions of source code must retain the above copyright
13242710Ssjg *    notice, this list of conditions and the following disclaimer.
14242710Ssjg * 2. Redistributions in binary form must reproduce the above copyright
15242710Ssjg *    notice, this list of conditions and the following disclaimer in the
16241823Smarcel *    documentation and/or other materials provided with the distribution.
17242710Ssjg * 3. All advertising materials mentioning features or use of this software
18241823Smarcel *    must display the following acknowledgement:
19258095Ssjg *	This product includes software developed by the University of
20258095Ssjg *	California, Berkeley and its contributors.
21258095Ssjg * 4. Neither the name of the University nor the names of its contributors
22241823Smarcel *    may be used to endorse or promote products derived from this software
23242710Ssjg *    without specific prior written permission.
24242710Ssjg *
25258095Ssjg * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26242710Ssjg * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27242710Ssjg * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28242710Ssjg * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29241823Smarcel * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30258095Ssjg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31258095Ssjg * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32258095Ssjg * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33241823Smarcel * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34242710Ssjg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35242710Ssjg * SUCH DAMAGE.
36242710Ssjg *
37242710Ssjg *	@(#)cpio.h	8.1 (Berkeley) 5/31/93
38242710Ssjg *	$Id$
39241823Smarcel */
40242710Ssjg
41242710Ssjg/*
42241823Smarcel * Defines common to all versions of cpio
43242710Ssjg */
44242710Ssjg#define TRAILER		"TRAILER!!!"	/* name in last archive record */
45272055Sngie
46272055Sngie/*
47242710Ssjg * Header encoding of the different file types
48272055Sngie */
49272055Sngie#define	C_ISDIR		 040000		/* Directory */
50272055Sngie#define	C_ISFIFO	 010000		/* FIFO */
51272055Sngie#define	C_ISREG		0100000		/* Regular file */
52272055Sngie#define	C_ISBLK		 060000		/* Block special file */
53272055Sngie#define	C_ISCHR		 020000		/* Character special file */
54258095Ssjg#define	C_ISCTG		0110000		/* Reserved for contiguous files */
55258095Ssjg#define	C_ISLNK		0120000		/* Reserved for symbolic links */
56249770Ssjg#define	C_ISOCK		0140000		/* Reserved for sockets */
57242710Ssjg#define C_IFMT		0170000		/* type of file */
58241823Smarcel
59242710Ssjg/*
60258095Ssjg * Data Interchange Format - Extended cpio header format - POSIX 1003.1-1990
61242710Ssjg */
62241823Smarceltypedef struct {
63242710Ssjg	char	c_magic[6];		/* magic cookie */
64241823Smarcel	char	c_dev[6];		/* device number */
65242710Ssjg	char	c_ino[6];		/* inode number */
66242710Ssjg	char	c_mode[6];		/* file type/access */
67242710Ssjg	char	c_uid[6];		/* owners uid */
68242710Ssjg	char	c_gid[6];		/* owners gid */
69272055Sngie	char	c_nlink[6];		/* # of links at archive creation */
70241823Smarcel	char	c_rdev[6];		/* block/char major/minor # */
71242710Ssjg	char	c_mtime[11];		/* modification time */
72242710Ssjg	char	c_namesize[6];		/* length of pathname */
73242710Ssjg	char	c_filesize[11];		/* length of file in bytes */
74242710Ssjg} HD_CPIO;
75241823Smarcel
76242710Ssjg#define	MAGIC		070707		/* transportable archive id */
77241823Smarcel
78242710Ssjg#ifdef _PAX_
79258095Ssjg#define	AMAGIC		"070707"	/* ascii equivalent string of MAGIC */
80241823Smarcel#define CPIO_MASK	0x3ffff		/* bits valid in the dev/ino fields */
81259209Sjmmv					/* used for dev/inode remaps */
82249770Ssjg#endif /* _PAX_ */
83272055Sngie
84241823Smarcel/*
85242710Ssjg * Binary cpio header structure
86242710Ssjg *
87242710Ssjg * CAUTION! CAUTION! CAUTION!
88242710Ssjg * Each field really represents a 16 bit short (NOT ASCII). Described as
89241823Smarcel * an array of chars in an attempt to improve portability!!
90241823Smarcel */
91242710Ssjgtypedef struct {
92259209Sjmmv	u_char	h_magic[2];
93259209Sjmmv	u_char	h_dev[2];
94241823Smarcel	u_char	h_ino[2];
95242710Ssjg	u_char	h_mode[2];
96242710Ssjg	u_char	h_uid[2];
97259209Sjmmv	u_char	h_gid[2];
98259209Sjmmv	u_char	h_nlink[2];
99241823Smarcel	u_char	h_rdev[2];
100241823Smarcel	u_char	h_mtime_1[2];
101241823Smarcel	u_char	h_mtime_2[2];
102242710Ssjg	u_char	h_namesize[2];
103242710Ssjg	u_char	h_filesize_1[2];
104241823Smarcel	u_char	h_filesize_2[2];
105241823Smarcel} HD_BCPIO;
106272055Sngie
107259209Sjmmv#ifdef _PAX_
108272055Sngie/*
109272055Sngie * extraction and creation macros for binary cpio
110272055Sngie */
111272055Sngie#define SHRT_EXT(ch)	((((unsigned)(ch)[0])<<8) | (((unsigned)(ch)[1])&0xff))
112272055Sngie#define RSHRT_EXT(ch)	((((unsigned)(ch)[1])<<8) | (((unsigned)(ch)[0])&0xff))
113259209Sjmmv#define CHR_WR_0(val)	((char)(((val) >> 24) & 0xff))
114259209Sjmmv#define CHR_WR_1(val)	((char)(((val) >> 16) & 0xff))
115272055Sngie#define CHR_WR_2(val)	((char)(((val) >> 8) & 0xff))
116259209Sjmmv#define CHR_WR_3(val)	((char)((val) & 0xff))
117241823Smarcel
118/*
119 * binary cpio masks and pads
120 */
121#define BCPIO_PAD(x)	((2 - ((x) & 1)) & 1)	/* pad to next 2 byte word */
122#define BCPIO_MASK	0xffff			/* mask for dev/ino fields */
123#endif /* _PAX_ */
124
125/*
126 * System VR4 cpio header structure (with/without file data crc)
127 */
128typedef struct {
129	char	c_magic[6];		/* magic cookie */
130	char	c_ino[8];		/* inode number */
131	char	c_mode[8];		/* file type/access */
132	char	c_uid[8];		/* owners uid */
133	char	c_gid[8];		/* owners gid */
134	char	c_nlink[8];		/* # of links at archive creation */
135	char	c_mtime[8];		/* modification time */
136	char	c_filesize[8];		/* length of file in bytes */
137	char	c_maj[8];		/* block/char major # */
138	char	c_min[8];		/* block/char minor # */
139	char	c_rmaj[8];		/* special file major # */
140	char	c_rmin[8];		/* special file minor # */
141	char	c_namesize[8];		/* length of pathname */
142	char	c_chksum[8];		/* 0 OR CRC of bytes of FILE data */
143} HD_VCPIO;
144
145#define	VMAGIC		070701		/* sVr4 new portable archive id */
146#define	VCMAGIC		070702		/* sVr4 new portable archive id CRC */
147#ifdef _PAX_
148#define	AVMAGIC		"070701"	/* ascii string of above */
149#define	AVCMAGIC	"070702"	/* ascii string of above */
150#define VCPIO_PAD(x)	((4 - ((x) & 3)) & 3)	/* pad to next 4 byte word */
151#define VCPIO_MASK	0xffffffff	/* mask for dev/ino fields */
152#endif /* _PAX_ */
153