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