]>
git.wh0rd.org - dump.git/blob - compat/include/bsdcompat.h
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
12 #define __dead volatile
19 #define MIN(a,b) ((a < b) ? a : b)
22 #define WINO ((ino_t)1)
25 #define MAXBSIZE EXT2_MAX_BLOCK_SIZE
26 #define ROOTINO EXT2_ROOT_INO
28 #define UF_NODUMP EXT2_NODUMP_FL
31 #define howmany(x,y) (((x)+((y)-1))/(y))
32 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
33 #define powerof2(x) ((((x)-1)&(x))==0)
35 #define dbtob(b) ((unsigned)(b) << DEV_BSHIFT)
36 #define fsbtodb(sb,b) ((int)(((long long)b * EXT2_BLOCK_SIZE(sb->super)) / DEV_BSIZE))
39 #define fs_fsize fragsize
40 #define fs_bsize blocksize
41 #define fs_size super->s_blocks_count
49 #define IFSOCK S_IFSOCK
54 typedef __u64 u_quad_t
;
58 * The BSD dump format reserves 4 bytes for a time_t, but other architectures
59 * (notably axp) have larger time_t. ctime4() is a modified ctime() which
60 * always accepts short 4-byte times. time4() is a similarly modified time().
62 #define ctime4(timep) ({ time_t t = *(timep); ctime(&t); })
63 #define time4(timep) ({time_t t; t = time(0); if (timep) *timep=t; t; })
66 * This is the ext2_inode structure but the fields have been renamed
67 * to match 4.4BSD's names
72 #define NINDIR(fs) EXT2_ADDR_PER_BLOCK(fs->super)
87 daddr_t di_db
[NDADDR
];
88 daddr_t di_ib
[NIADDR
];
99 #define di_rdev di_db[0]
100 /* #define di_ouid di_uid */
101 /* #define di_ogid di_gid */
104 * This is the ext2_dir_entry structure but the fields have been renamed
105 * to match 4.4BSD's names
107 * This is the 4.4BSD directory entry structure
109 #define DIRBLKSIZ DEV_BSIZE
110 #define MAXNAMLEN 255
121 char d_name
[MAXNAMLEN
+ 1];
138 * Convert between stat structure types and directory types.
140 #define IFTODT(mode) (((mode) & 0170000) >> 12)
141 #define DTTOIF(dirtype) ((dirtype) << 12)
144 * The DIRSIZ macro gives the minimum record length which will hold
145 * the directory entry. This requires the amount of space in struct direct
146 * without the d_name field, plus enough space for the name with a terminating
147 * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
150 #if (BYTE_ORDER == LITTLE_ENDIAN)
151 #define DIRSIZ(oldfmt, dp) \
153 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \
154 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)))
156 #define DIRSIZ(oldfmt, dp) \
157 ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
161 #define DIRSIZ(oldfmt,dp) EXT2_DIR_REC_LEN(((dp)->d_namlen & 0xff) + 1)
166 * This is the old (Net/2) BSD inode structure
167 * copied from the FreeBSD 1.1.5.1 <ufs/dinode.h> include file
169 #define MAXFASTLINK (((NDADDR + NIADDR) * sizeof(unsigned long)) - 1)
171 struct old_bsd_inode
{
193 daddr_t di_udb
[NDADDR
];
194 daddr_t di_uib
[NIADDR
];
196 char di_usymlink
[MAXFASTLINK
+ 1];
199 daddr_t di_db
[NDADDR
];
200 daddr_t di_ib
[NIADDR
];
208 struct bsdtimeval
{ /* XXX alpha-*-linux is deviant */
214 * This is the new (4.4) BSD inode structure
215 * copied from the FreeBSD 2.0 <ufs/ufs/dinode.h> include file
217 struct new_bsd_inode
{
225 struct bsdtimeval di_atime
;
226 struct bsdtimeval di_mtime
;
227 struct bsdtimeval di_ctime
;
228 daddr_t di_db
[NDADDR
];
229 daddr_t di_ib
[NIADDR
];
238 #define di_ouid di_u.oldids[0]
239 #define di_ogid di_u.oldids[1]