]> git.wh0rd.org Git - dump.git/blob - compat/include/bsdcompat.h
Added version in usage text.
[dump.git] / compat / include / bsdcompat.h
1 /*
2  *      Ported to Linux's Second Extended File System as part of the
3  *      dump and restore backup suit
4  *      Remy Card <card@Linux.EU.Org>, 1994-1997
5  *      Stelian Pop <pop@cybercable.fr>, 1999
6  *
7  *      $Id: bsdcompat.h,v 1.6 1999/10/13 09:57:18 stelian Exp $
8  */
9
10 #include <config.h>
11 #include <sys/time.h>
12 #include <dirent.h>
13
14 #define __dead          volatile
15
16 #ifndef NBBY
17 #define NBBY            8
18 #endif
19
20 #ifndef MIN
21 #define MIN(a,b)        ((a < b) ? a : b)
22 #endif
23
24 #define WINO            ((ino_t)1)
25 #define DEV_BSIZE       512
26 #define DEV_BSHIFT      9
27 #define MAXBSIZE        EXT2_MAX_BLOCK_SIZE
28 #define ROOTINO         EXT2_ROOT_INO
29 #ifdef  EXT2_NODUMP_FL
30 #define UF_NODUMP       EXT2_NODUMP_FL
31 #endif
32
33 #define howmany(x,y)    (((x)+((y)-1))/(y))
34 #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
35 #define powerof2(x)     ((((x)-1)&(x))==0)
36
37 #define dbtob(b)        ((unsigned)(b) << DEV_BSHIFT)
38 #define fsbtodb(sb,b)   ((int)(((long long)b * EXT2_BLOCK_SIZE(sb->super)) / DEV_BSIZE))
39
40 #define sblock          fs
41 #define fs_fsize        fragsize
42 #define fs_bsize        blocksize
43 #define fs_size         super->s_blocks_count
44
45 #define IFMT            S_IFMT
46 #define IFLNK           S_IFLNK
47 #define IFREG           S_IFREG
48 #define IFDIR           S_IFDIR
49 #define IFCHR           S_IFCHR
50 #define IFBLK           S_IFBLK
51 #define IFSOCK          S_IFSOCK
52 #define IFIFO           S_IFIFO
53
54 #if 0
55 typedef __s64           quad_t;
56 typedef __u64           u_quad_t;
57 #endif
58
59 /*
60  * The BSD dump format reserves 4 bytes for a time_t, but other architectures
61  * (notably axp) have larger time_t.  ctime4() is a modified ctime() which
62  * always accepts short 4-byte times.  time4() is a similarly modified time().
63  */
64 #define ctime4(timep) ({ time_t t = *(timep); ctime(&t); })
65 #define time4(timep) ({time_t t; t = time(0); if (timep) *timep=t; t; })
66
67 /*
68  * This is the ext2_inode structure but the fields have been renamed
69  * to match 4.4BSD's names
70  */
71 #define NDADDR          12
72 #define NIADDR           3
73
74 #define NINDIR(fs)      EXT2_ADDR_PER_BLOCK(fs->super)
75
76 struct dinode {
77         __u16   di_mode;
78         __u16   di_uid;
79         __u32   di_size;
80         __u32   di_atime;
81         __u32   di_ctime;
82         __u32   di_mtime;
83         __u32   di_dtime;
84         __u16   di_gid;
85         __u16   di_nlink;
86         __u32   di_blocks;
87         __u32   di_flags;
88         __u32   di_reserved1;
89         daddr_t di_db[NDADDR];
90         daddr_t di_ib[NIADDR];
91         __u32   di_gen;
92         __u32   di_file_acl;
93         __u32   di_dir_acl;
94         __u32   di_faddr;
95         __u8    di_frag;
96         __u8    di_fsize;
97         __u16   di_pad1;
98         __u32   di_spare[2];
99 };
100
101 #define di_rdev         di_db[0]
102 /* #define di_ouid              di_uid */
103 /* #define di_ogid              di_gid */
104
105 /*
106  * This is the ext2_dir_entry structure but the fields have been renamed
107  * to match 4.4BSD's names
108  *
109  * This is the 4.4BSD directory entry structure
110  */
111 #define DIRBLKSIZ       DEV_BSIZE
112 #ifndef MAXNAMLEN
113 #define MAXNAMLEN       255
114 #endif
115
116 struct direct {
117         __u32   d_ino;
118         __u16   d_reclen;
119 #if 1
120         __u8    d_namlen;
121         __u8    d_type;
122 #else
123         __u16   d_namlen;
124 #endif
125         char            d_name[MAXNAMLEN + 1];
126 };
127
128 /*
129  * Convert between stat structure types and directory types.
130  */
131 #define IFTODT(mode)    (((mode) & 0170000) >> 12)
132 #define DTTOIF(dirtype) ((dirtype) << 12)
133
134 /*
135  * The DIRSIZ macro gives the minimum record length which will hold
136  * the directory entry.  This requires the amount of space in struct direct
137  * without the d_name field, plus enough space for the name with a terminating
138  * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
139  */
140 #if     0
141 #if (BYTE_ORDER == LITTLE_ENDIAN)
142 #define DIRSIZ(oldfmt, dp) \
143     ((oldfmt) ? \
144     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \
145     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)))
146 #else
147 #define DIRSIZ(oldfmt, dp) \
148     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
149 #endif
150 #else
151
152 #define DIRSIZ(oldfmt,dp)       EXT2_DIR_REC_LEN(((dp)->d_namlen & 0xff) + 1)
153
154 #endif
155
156 /*
157  * This is the old (Net/2) BSD inode structure
158  * copied from the FreeBSD 1.1.5.1 <ufs/dinode.h> include file
159  */
160 #define MAXFASTLINK     (((NDADDR + NIADDR) * sizeof(unsigned long)) - 1)
161
162 struct old_bsd_inode {
163         __u16           di_mode;
164         __s16           di_nlink;
165         __u16           di_uid;
166         __u16           di_gid;
167 #if     1
168         union {
169                 u_quad_t        v;
170                 __u32           val[2];
171         }               di_qsize;
172 #else
173         u_quad_t        di_size;
174 #endif
175         __u32           di_atime;
176         __s32           di_atspare;
177         __u32           di_mtime;
178         __s32           di_mtspare;
179         __u32           di_ctime;
180         __s32           di_ctspare;
181 #if     0
182         union {
183                 struct {
184                         daddr_t di_udb[NDADDR];
185                         daddr_t di_uib[NIADDR];
186                 } di_addr;
187                 char    di_usymlink[MAXFASTLINK + 1];
188         }               di_un;
189 #else
190         daddr_t         di_db[NDADDR];
191         daddr_t         di_ib[NIADDR];
192 #endif
193         __s32           di_flags;
194         __s32           di_blocks;
195         __s32           di_gen;
196         __u32           di_spare[4];
197 };
198
199 struct bsdtimeval {    /* XXX alpha-*-linux is deviant */
200         __u32   tv_sec;
201         __u32   tv_usec;
202 };
203
204 /*
205  * This is the new (4.4) BSD inode structure
206  * copied from the FreeBSD 2.0 <ufs/ufs/dinode.h> include file
207  */
208 struct new_bsd_inode {
209         __u16           di_mode;
210         __s16           di_nlink;
211         union {
212                 __u16           oldids[2];
213                 __u32           inumber;
214         }               di_u;
215         u_quad_t        di_size;
216         struct bsdtimeval       di_atime;
217         struct bsdtimeval       di_mtime;
218         struct bsdtimeval       di_ctime;
219         daddr_t         di_db[NDADDR];
220         daddr_t         di_ib[NIADDR];
221         __u32           di_flags;
222         __s32           di_blocks;
223         __s32           di_gen;
224         __u32           di_uid;
225         __u32           di_gid;
226         __s32           di_spare[2];
227 };
228
229 #define di_ouid         di_u.oldids[0]
230 #define di_ogid         di_u.oldids[1]