xref: /openbsd/bin/pax/cpio.h (revision 29295d1c)
1*29295d1cSmillert /*	$OpenBSD: cpio.h,v 1.4 2003/06/02 23:32:08 millert Exp $	*/
2df930be7Sderaadt /*	$NetBSD: cpio.h,v 1.3 1995/03/21 09:07:15 cgd Exp $	*/
3df930be7Sderaadt 
4df930be7Sderaadt /*-
5df930be7Sderaadt  * Copyright (c) 1992 Keith Muller.
6df930be7Sderaadt  * Copyright (c) 1992, 1993
7df930be7Sderaadt  *	The Regents of the University of California.  All rights reserved.
8df930be7Sderaadt  *
9df930be7Sderaadt  * This code is derived from software contributed to Berkeley by
10df930be7Sderaadt  * Keith Muller of the University of California, San Diego.
11df930be7Sderaadt  *
12df930be7Sderaadt  * Redistribution and use in source and binary forms, with or without
13df930be7Sderaadt  * modification, are permitted provided that the following conditions
14df930be7Sderaadt  * are met:
15df930be7Sderaadt  * 1. Redistributions of source code must retain the above copyright
16df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer.
17df930be7Sderaadt  * 2. Redistributions in binary form must reproduce the above copyright
18df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer in the
19df930be7Sderaadt  *    documentation and/or other materials provided with the distribution.
20*29295d1cSmillert  * 3. Neither the name of the University nor the names of its contributors
21df930be7Sderaadt  *    may be used to endorse or promote products derived from this software
22df930be7Sderaadt  *    without specific prior written permission.
23df930be7Sderaadt  *
24df930be7Sderaadt  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25df930be7Sderaadt  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26df930be7Sderaadt  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27df930be7Sderaadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28df930be7Sderaadt  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29df930be7Sderaadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30df930be7Sderaadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31df930be7Sderaadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32df930be7Sderaadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33df930be7Sderaadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34df930be7Sderaadt  * SUCH DAMAGE.
35df930be7Sderaadt  *
36df930be7Sderaadt  *	@(#)cpio.h	8.1 (Berkeley) 5/31/93
37df930be7Sderaadt  */
38df930be7Sderaadt 
39df930be7Sderaadt /*
40df930be7Sderaadt  * Defines common to all versions of cpio
41df930be7Sderaadt  */
42df930be7Sderaadt #define TRAILER		"TRAILER!!!"	/* name in last archive record */
43df930be7Sderaadt 
44df930be7Sderaadt /*
45df930be7Sderaadt  * Header encoding of the different file types
46df930be7Sderaadt  */
47df930be7Sderaadt #define	C_ISDIR		 040000		/* Directory */
48df930be7Sderaadt #define	C_ISFIFO	 010000		/* FIFO */
49df930be7Sderaadt #define	C_ISREG		0100000		/* Regular file */
50df930be7Sderaadt #define	C_ISBLK		 060000		/* Block special file */
51df930be7Sderaadt #define	C_ISCHR		 020000		/* Character special file */
52df930be7Sderaadt #define	C_ISCTG		0110000		/* Reserved for contiguous files */
53df930be7Sderaadt #define	C_ISLNK		0120000		/* Reserved for symbolic links */
54df930be7Sderaadt #define	C_ISOCK		0140000		/* Reserved for sockets */
55df930be7Sderaadt #define C_IFMT		0170000		/* type of file */
56df930be7Sderaadt 
57df930be7Sderaadt /*
58df930be7Sderaadt  * Data Interchange Format - Extended cpio header format - POSIX 1003.1-1990
59df930be7Sderaadt  */
60df930be7Sderaadt typedef struct {
61df930be7Sderaadt 	char	c_magic[6];		/* magic cookie */
62df930be7Sderaadt 	char	c_dev[6];		/* device number */
63df930be7Sderaadt 	char	c_ino[6];		/* inode number */
64df930be7Sderaadt 	char	c_mode[6];		/* file type/access */
65df930be7Sderaadt 	char	c_uid[6];		/* owners uid */
66df930be7Sderaadt 	char	c_gid[6];		/* owners gid */
67df930be7Sderaadt 	char	c_nlink[6];		/* # of links at archive creation */
68df930be7Sderaadt 	char	c_rdev[6];		/* block/char major/minor # */
69df930be7Sderaadt 	char	c_mtime[11];		/* modification time */
70df930be7Sderaadt 	char	c_namesize[6];		/* length of pathname */
71df930be7Sderaadt 	char	c_filesize[11];		/* length of file in bytes */
72df930be7Sderaadt } HD_CPIO;
73df930be7Sderaadt 
74df930be7Sderaadt #define	MAGIC		070707		/* transportable archive id */
75df930be7Sderaadt 
76df930be7Sderaadt #ifdef _PAX_
77df930be7Sderaadt #define	AMAGIC		"070707"	/* ascii equivalent string of MAGIC */
78df930be7Sderaadt #define CPIO_MASK	0x3ffff		/* bits valid in the dev/ino fields */
79df930be7Sderaadt 					/* used for dev/inode remaps */
80df930be7Sderaadt #endif /* _PAX_ */
81df930be7Sderaadt 
82df930be7Sderaadt /*
83df930be7Sderaadt  * Binary cpio header structure
84df930be7Sderaadt  *
85df930be7Sderaadt  * CAUTION! CAUTION! CAUTION!
86df930be7Sderaadt  * Each field really represents a 16 bit short (NOT ASCII). Described as
87df930be7Sderaadt  * an array of chars in an attempt to improve portability!!
88df930be7Sderaadt  */
89df930be7Sderaadt typedef struct {
90df930be7Sderaadt 	u_char	h_magic[2];
91df930be7Sderaadt 	u_char	h_dev[2];
92df930be7Sderaadt 	u_char	h_ino[2];
93df930be7Sderaadt 	u_char	h_mode[2];
94df930be7Sderaadt 	u_char	h_uid[2];
95df930be7Sderaadt 	u_char	h_gid[2];
96df930be7Sderaadt 	u_char	h_nlink[2];
97df930be7Sderaadt 	u_char	h_rdev[2];
98df930be7Sderaadt 	u_char	h_mtime_1[2];
99df930be7Sderaadt 	u_char	h_mtime_2[2];
100df930be7Sderaadt 	u_char	h_namesize[2];
101df930be7Sderaadt 	u_char	h_filesize_1[2];
102df930be7Sderaadt 	u_char	h_filesize_2[2];
103df930be7Sderaadt } HD_BCPIO;
104df930be7Sderaadt 
105df930be7Sderaadt #ifdef _PAX_
106df930be7Sderaadt /*
107df930be7Sderaadt  * extraction and creation macros for binary cpio
108df930be7Sderaadt  */
109df930be7Sderaadt #define SHRT_EXT(ch)	((((unsigned)(ch)[0])<<8) | (((unsigned)(ch)[1])&0xff))
110df930be7Sderaadt #define RSHRT_EXT(ch)	((((unsigned)(ch)[1])<<8) | (((unsigned)(ch)[0])&0xff))
111df930be7Sderaadt #define CHR_WR_0(val)	((char)(((val) >> 24) & 0xff))
112df930be7Sderaadt #define CHR_WR_1(val)	((char)(((val) >> 16) & 0xff))
113df930be7Sderaadt #define CHR_WR_2(val)	((char)(((val) >> 8) & 0xff))
114df930be7Sderaadt #define CHR_WR_3(val)	((char)((val) & 0xff))
115df930be7Sderaadt 
116df930be7Sderaadt /*
117df930be7Sderaadt  * binary cpio masks and pads
118df930be7Sderaadt  */
119df930be7Sderaadt #define BCPIO_PAD(x)	((2 - ((x) & 1)) & 1)	/* pad to next 2 byte word */
120df930be7Sderaadt #define BCPIO_MASK	0xffff			/* mask for dev/ino fields */
121df930be7Sderaadt #endif /* _PAX_ */
122df930be7Sderaadt 
123df930be7Sderaadt /*
124df930be7Sderaadt  * System VR4 cpio header structure (with/without file data crc)
125df930be7Sderaadt  */
126df930be7Sderaadt typedef struct {
127df930be7Sderaadt 	char	c_magic[6];		/* magic cookie */
128df930be7Sderaadt 	char	c_ino[8];		/* inode number */
129df930be7Sderaadt 	char	c_mode[8];		/* file type/access */
130df930be7Sderaadt 	char	c_uid[8];		/* owners uid */
131df930be7Sderaadt 	char	c_gid[8];		/* owners gid */
132df930be7Sderaadt 	char	c_nlink[8];		/* # of links at archive creation */
133df930be7Sderaadt 	char	c_mtime[8];		/* modification time */
134df930be7Sderaadt 	char	c_filesize[8];		/* length of file in bytes */
135df930be7Sderaadt 	char	c_maj[8];		/* block/char major # */
136df930be7Sderaadt 	char	c_min[8];		/* block/char minor # */
137df930be7Sderaadt 	char	c_rmaj[8];		/* special file major # */
138df930be7Sderaadt 	char	c_rmin[8];		/* special file minor # */
139df930be7Sderaadt 	char	c_namesize[8];		/* length of pathname */
140df930be7Sderaadt 	char	c_chksum[8];		/* 0 OR CRC of bytes of FILE data */
141df930be7Sderaadt } HD_VCPIO;
142df930be7Sderaadt 
143df930be7Sderaadt #define	VMAGIC		070701		/* sVr4 new portable archive id */
144df930be7Sderaadt #define	VCMAGIC		070702		/* sVr4 new portable archive id CRC */
145df930be7Sderaadt #ifdef _PAX_
146df930be7Sderaadt #define	AVMAGIC		"070701"	/* ascii string of above */
147df930be7Sderaadt #define	AVCMAGIC	"070702"	/* ascii string of above */
148df930be7Sderaadt #define VCPIO_PAD(x)	((4 - ((x) & 3)) & 3)	/* pad to next 4 byte word */
149df930be7Sderaadt #define VCPIO_MASK	0xffffffff	/* mask for dev/ino fields */
150df930be7Sderaadt #endif /* _PAX_ */
151