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 <stelian@popies.net>, 1999-2000
6 * Stelian Pop <stelian@popies.net> - AlcĂ´ve <www.alcove.com>, 2000-2002
8 * $Id: bsdcompat.h,v 1.24 2005/05/02 15:10:45 stelian Exp $
14 #include <ext2fs/ext2fs.h>
16 #define __dead volatile
17 #define UNUSED(x) x __attribute__ ((unused))
24 #define MIN(a,b) ((a < b) ? a : b)
32 #define MAXBSIZE EXT2_MAX_BLOCK_SIZE
33 #define ROOTINO EXT2_ROOT_INO
38 #define UF_NODUMP EXT2_NODUMP_FL
42 #define howmany(x,y) (((x)+((y)-1))/(y))
45 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
48 #define powerof2(x) ((((x)-1)&(x))==0)
51 #define fsbtodb(sb,b) ((ext2_loff_t)(((long long)(b) * EXT2_BLOCK_SIZE((sb)->super)) / DEV_BSIZE))
52 #define dbtofsb(sb,b) ((int)(((long long)(b) * DEV_BSIZE) / EXT2_BLOCK_SIZE((sb)->super)))
55 #define fs_fsize fragsize
56 #define fs_bsize blocksize
57 #define fs_size super->s_blocks_count
65 #define IFSOCK S_IFSOCK
70 typedef __u64 u_quad_t;
74 * The BSD dump format reserves 4 bytes for a time_t, but other architectures
75 * (notably axp) have larger time_t. ctime4() is a modified ctime() which
76 * always accepts short 4-byte times.
78 #define ctime4(timep) ({ time_t t = *(timep); ctime(&t); })
81 * This is the ext2_inode structure but the fields have been renamed
82 * to match 4.4BSD's names
87 #define NINDIR(fs) EXT2_ADDR_PER_BLOCK(fs->super)
91 typedef uint16_t __u16;
92 typedef uint32_t __u32;
94 typedef int16_t __s16;
95 typedef int32_t __s32;
97 typedef unsigned int u_int;
100 typedef unsigned short u_int16_t;
103 typedef unsigned char u_char;
105 typedef int64_t quad_t;
137 #define di_rdev di_db[0]
138 /* #define di_ouid di_uid */
139 /* #define di_ogid di_gid */
140 #define di_size_high di_dir_acl
143 * This is the ext2_dir_entry structure but the fields have been renamed
144 * to match 4.4BSD's names
146 * This is the 4.4BSD directory entry structure
148 #define DIRBLKSIZ DEV_BSIZE
150 #define MAXNAMLEN 255
154 #define MAXNAMLEN 255
176 #define d_fileno d_ino
180 * The direct structure used by dump/restore.
187 char d_name[MAXNAMLEN + 1];
190 * Convert between stat structure types and directory types.
192 #define IFTODT(mode) (((mode) & 0170000) >> 12)
193 #define DTTOIF(dirtype) ((dirtype) << 12)
196 * The DIRSIZ macro gives the minimum record length which will hold
197 * the directory entry. This requires the amount of space in struct direct
198 * without the d_name field, plus enough space for the name with a terminating
199 * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
203 #if (BYTE_ORDER == LITTLE_ENDIAN)
204 #define DIRSIZ(oldfmt, dp) \
206 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \
207 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)))
208 #else /* BYTE_ORDER */
209 #define DIRSIZ(oldfmt, dp) \
210 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
213 #define DIRSIZ(oldfmt,dp) EXT2_DIR_REC_LEN(((dp)->d_namlen & 0xff) + 1)
215 #else /* __linux__ */
216 #define DIRSIZ(oldfmt, dp) \
217 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
221 * This is the old (Net/2) BSD inode structure
222 * copied from the FreeBSD 1.1.5.1 <ufs/dinode.h> include file
224 #define MAXFASTLINK (((NDADDR + NIADDR) * sizeof(unsigned long)) - 1)
226 struct old_bsd_inode {
248 daddr_t di_udb[NDADDR];
249 daddr_t di_uib[NIADDR];
251 char di_usymlink[MAXFASTLINK + 1];
263 struct bsdtimeval { /* XXX alpha-*-linux is deviant */
269 * This is the new (4.4) BSD inode structure
270 * copied from the FreeBSD 2.0 <ufs/ufs/dinode.h> include file
272 struct new_bsd_inode {
280 struct bsdtimeval di_atime;
281 struct bsdtimeval di_mtime;
282 struct bsdtimeval di_ctime;
293 #define di_ouid di_u.oldids[0]
294 #define di_ogid di_u.oldids[1]