]> git.wh0rd.org - dump.git/blame - compat/include/bsdcompat.h
Added the DT_* constants again, old libc sucks
[dump.git] / compat / include / bsdcompat.h
CommitLineData
1227625a
SP
1/*
2 * Ported to Linux's Second Extended File System as part of the
3 * dump and restore backup suit
b45f51d6 4 * Remy Card <card@Linux.EU.Org>, 1994-1997
df9ae507 5 * Stelian Pop <pop@cybercable.fr>, 1999
1227625a 6 *
fa58b58d 7 * $Id: bsdcompat.h,v 1.7 1999/10/22 18:12:32 tiniou Exp $
1227625a
SP
8 */
9
10#include <config.h>
b45f51d6 11#include <sys/time.h>
8d4197bb 12#include <dirent.h>
1227625a
SP
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
55typedef __s64 quad_t;
56typedef __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
76struct 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
8d4197bb 112#ifndef MAXNAMLEN
1227625a 113#define MAXNAMLEN 255
8d4197bb 114#endif
1227625a 115
fa58b58d
SP
116/*
117 * For old libc.
118 */
119#ifndef DT_UNKNOWN
120#define DT_UNKNOWN 0
121#define DT_FIFO 1
122#define DT_CHR 2
123#define DT_DIR 4
124#define DT_BLK 6
125#define DT_REG 8
126#define DT_LNK 10
127#define DT_SOCK 12
128#endif
129
1227625a
SP
130struct direct {
131 __u32 d_ino;
132 __u16 d_reclen;
133#if 1
134 __u8 d_namlen;
135 __u8 d_type;
136#else
137 __u16 d_namlen;
138#endif
139 char d_name[MAXNAMLEN + 1];
140};
141
1227625a
SP
142/*
143 * Convert between stat structure types and directory types.
144 */
145#define IFTODT(mode) (((mode) & 0170000) >> 12)
146#define DTTOIF(dirtype) ((dirtype) << 12)
147
148/*
149 * The DIRSIZ macro gives the minimum record length which will hold
150 * the directory entry. This requires the amount of space in struct direct
151 * without the d_name field, plus enough space for the name with a terminating
152 * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
153 */
154#if 0
155#if (BYTE_ORDER == LITTLE_ENDIAN)
156#define DIRSIZ(oldfmt, dp) \
157 ((oldfmt) ? \
158 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \
159 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)))
160#else
161#define DIRSIZ(oldfmt, dp) \
162 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
163#endif
164#else
165
166#define DIRSIZ(oldfmt,dp) EXT2_DIR_REC_LEN(((dp)->d_namlen & 0xff) + 1)
167
168#endif
169
170/*
171 * This is the old (Net/2) BSD inode structure
172 * copied from the FreeBSD 1.1.5.1 <ufs/dinode.h> include file
173 */
174#define MAXFASTLINK (((NDADDR + NIADDR) * sizeof(unsigned long)) - 1)
175
176struct old_bsd_inode {
177 __u16 di_mode;
178 __s16 di_nlink;
179 __u16 di_uid;
180 __u16 di_gid;
181#if 1
182 union {
183 u_quad_t v;
184 __u32 val[2];
185 } di_qsize;
186#else
187 u_quad_t di_size;
188#endif
189 __u32 di_atime;
190 __s32 di_atspare;
191 __u32 di_mtime;
192 __s32 di_mtspare;
193 __u32 di_ctime;
194 __s32 di_ctspare;
195#if 0
196 union {
197 struct {
198 daddr_t di_udb[NDADDR];
199 daddr_t di_uib[NIADDR];
200 } di_addr;
201 char di_usymlink[MAXFASTLINK + 1];
202 } di_un;
203#else
204 daddr_t di_db[NDADDR];
205 daddr_t di_ib[NIADDR];
206#endif
207 __s32 di_flags;
208 __s32 di_blocks;
209 __s32 di_gen;
210 __u32 di_spare[4];
211};
212
ddd2ef55
SP
213struct bsdtimeval { /* XXX alpha-*-linux is deviant */
214 __u32 tv_sec;
215 __u32 tv_usec;
216};
217
1227625a
SP
218/*
219 * This is the new (4.4) BSD inode structure
220 * copied from the FreeBSD 2.0 <ufs/ufs/dinode.h> include file
221 */
222struct new_bsd_inode {
223 __u16 di_mode;
224 __s16 di_nlink;
225 union {
226 __u16 oldids[2];
227 __u32 inumber;
228 } di_u;
229 u_quad_t di_size;
ddd2ef55
SP
230 struct bsdtimeval di_atime;
231 struct bsdtimeval di_mtime;
232 struct bsdtimeval di_ctime;
1227625a
SP
233 daddr_t di_db[NDADDR];
234 daddr_t di_ib[NIADDR];
235 __u32 di_flags;
236 __s32 di_blocks;
237 __s32 di_gen;
238 __u32 di_uid;
239 __u32 di_gid;
240 __s32 di_spare[2];
241};
242
243#define di_ouid di_u.oldids[0]
244#define di_ogid di_u.oldids[1]