mirror of
https://git.FreeBSD.org/src.git
synced 2026-06-02 11:24:32 +00:00
Standardize the definition of a UFS dinode.
Each program that operates on UFS on-disk inodes defines its own version of a dinode. They all (of necessity) define the same layout but use different names. This change adds a definition of a dinode (a union of a UFS1 on-disk inode and a UFS2 on-disk inode) as well as a dinodep (a union of a pointer to a UFS1 on-disk inode and a pointer to a UFS2 on-disk inode) in sys/ufs/ufs/dinode.h. It then deletes the definitions of dinode and dinodep in all the programs that operate on them and instead uses these standard definitions. No functional change intended. MFC-after: 1 week
This commit is contained in:
@@ -37,14 +37,6 @@
|
|||||||
*/
|
*/
|
||||||
#define LIBUFS_BUFALIGN 128
|
#define LIBUFS_BUFALIGN 128
|
||||||
|
|
||||||
/*
|
|
||||||
* libufs structures.
|
|
||||||
*/
|
|
||||||
union dinodep {
|
|
||||||
struct ufs1_dinode *dp1;
|
|
||||||
struct ufs2_dinode *dp2;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* userland ufs disk.
|
* userland ufs disk.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -51,10 +51,6 @@
|
|||||||
|
|
||||||
#include "dump.h"
|
#include "dump.h"
|
||||||
|
|
||||||
union dinode {
|
|
||||||
struct ufs1_dinode dp1;
|
|
||||||
struct ufs2_dinode dp2;
|
|
||||||
};
|
|
||||||
#define DIP(dp, field) \
|
#define DIP(dp, field) \
|
||||||
((sblock->fs_magic == FS_UFS1_MAGIC) ? \
|
((sblock->fs_magic == FS_UFS1_MAGIC) ? \
|
||||||
(dp)->dp1.field : (dp)->dp2.field)
|
(dp)->dp1.field : (dp)->dp2.field)
|
||||||
|
|||||||
@@ -75,10 +75,6 @@
|
|||||||
#define INOBUFSIZE 64*1024 /* size of buffer to read inodes in pass1 */
|
#define INOBUFSIZE 64*1024 /* size of buffer to read inodes in pass1 */
|
||||||
#define ZEROBUFSIZE (dev_bsize * 128) /* size of zero buffer used by -Z */
|
#define ZEROBUFSIZE (dev_bsize * 128) /* size of zero buffer used by -Z */
|
||||||
|
|
||||||
union dinode {
|
|
||||||
struct ufs1_dinode dp1;
|
|
||||||
struct ufs2_dinode dp2;
|
|
||||||
};
|
|
||||||
#define DIP(dp, field) \
|
#define DIP(dp, field) \
|
||||||
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
|
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
|
||||||
(dp)->dp1.field : (dp)->dp2.field)
|
(dp)->dp1.field : (dp)->dp2.field)
|
||||||
|
|||||||
@@ -429,6 +429,7 @@ void
|
|||||||
ginode(ino_t inumber, struct inode *ip)
|
ginode(ino_t inumber, struct inode *ip)
|
||||||
{
|
{
|
||||||
ufs2_daddr_t iblk;
|
ufs2_daddr_t iblk;
|
||||||
|
union dinodep dpp;
|
||||||
struct ufs2_dinode *dp;
|
struct ufs2_dinode *dp;
|
||||||
|
|
||||||
if (inumber < UFS_ROOTINO || inumber >= maxino)
|
if (inumber < UFS_ROOTINO || inumber >= maxino)
|
||||||
@@ -466,11 +467,12 @@ ginode(ino_t inumber, struct inode *ip)
|
|||||||
if (sblock.fs_magic == FS_UFS1_MAGIC) {
|
if (sblock.fs_magic == FS_UFS1_MAGIC) {
|
||||||
ip->i_dp = (union dinode *)
|
ip->i_dp = (union dinode *)
|
||||||
&ip->i_bp->b_un.b_dinode1[inumber - ip->i_bp->b_index];
|
&ip->i_bp->b_un.b_dinode1[inumber - ip->i_bp->b_index];
|
||||||
|
dpp.dp1 = (struct ufs1_dinode *)ip->i_dp;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ip->i_dp = (union dinode *)
|
ip->i_dp = (union dinode *)
|
||||||
&ip->i_bp->b_un.b_dinode2[inumber - ip->i_bp->b_index];
|
&ip->i_bp->b_un.b_dinode2[inumber - ip->i_bp->b_index];
|
||||||
dp = (struct ufs2_dinode *)ip->i_dp;
|
dpp.dp2 = dp = (struct ufs2_dinode *)ip->i_dp;
|
||||||
/* Do not check hash of inodes being created */
|
/* Do not check hash of inodes being created */
|
||||||
if (dp->di_mode != 0 && ffs_verify_dinode_ckhash(&sblock, dp)) {
|
if (dp->di_mode != 0 && ffs_verify_dinode_ckhash(&sblock, dp)) {
|
||||||
pwarn("INODE CHECK-HASH FAILED");
|
pwarn("INODE CHECK-HASH FAILED");
|
||||||
@@ -520,6 +522,7 @@ getnextinode(ino_t inumber, int rebuiltcg)
|
|||||||
mode_t mode;
|
mode_t mode;
|
||||||
ufs2_daddr_t ndb, blk;
|
ufs2_daddr_t ndb, blk;
|
||||||
union dinode *dp;
|
union dinode *dp;
|
||||||
|
union dinodep dpp;
|
||||||
struct inode ip;
|
struct inode ip;
|
||||||
static caddr_t nextinop;
|
static caddr_t nextinop;
|
||||||
|
|
||||||
@@ -550,10 +553,13 @@ getnextinode(ino_t inumber, int rebuiltcg)
|
|||||||
nextinop = inobuf.b_un.b_buf;
|
nextinop = inobuf.b_un.b_buf;
|
||||||
}
|
}
|
||||||
dp = (union dinode *)nextinop;
|
dp = (union dinode *)nextinop;
|
||||||
if (sblock.fs_magic == FS_UFS1_MAGIC)
|
if (sblock.fs_magic == FS_UFS1_MAGIC) {
|
||||||
nextinop += sizeof(struct ufs1_dinode);
|
nextinop += sizeof(struct ufs1_dinode);
|
||||||
else
|
dpp.dp1 = (struct ufs1_dinode *)dp;
|
||||||
|
} else {
|
||||||
nextinop += sizeof(struct ufs2_dinode);
|
nextinop += sizeof(struct ufs2_dinode);
|
||||||
|
dpp.dp2 = (struct ufs2_dinode *)dp;
|
||||||
|
}
|
||||||
if ((ckhashadd & CK_INODE) != 0) {
|
if ((ckhashadd & CK_INODE) != 0) {
|
||||||
ffs_update_dinode_ckhash(&sblock, (struct ufs2_dinode *)dp);
|
ffs_update_dinode_ckhash(&sblock, (struct ufs2_dinode *)dp);
|
||||||
dirty(&inobuf);
|
dirty(&inobuf);
|
||||||
|
|||||||
@@ -89,10 +89,6 @@ static struct csum *fscs;
|
|||||||
#define sblock disk.d_fs
|
#define sblock disk.d_fs
|
||||||
#define acg disk.d_cg
|
#define acg disk.d_cg
|
||||||
|
|
||||||
union dinode {
|
|
||||||
struct ufs1_dinode dp1;
|
|
||||||
struct ufs2_dinode dp2;
|
|
||||||
};
|
|
||||||
#define DIP(dp, field) \
|
#define DIP(dp, field) \
|
||||||
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
|
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
|
||||||
(dp)->dp1.field : (dp)->dp2.field)
|
(dp)->dp1.field : (dp)->dp2.field)
|
||||||
|
|||||||
@@ -77,10 +77,6 @@ union {
|
|||||||
long dev_bsize = 1;
|
long dev_bsize = 1;
|
||||||
ino_t maxino;
|
ino_t maxino;
|
||||||
|
|
||||||
union dinode {
|
|
||||||
struct ufs1_dinode dp1;
|
|
||||||
struct ufs2_dinode dp2;
|
|
||||||
};
|
|
||||||
#define DIP(dp, field) \
|
#define DIP(dp, field) \
|
||||||
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
|
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
|
||||||
(dp)->dp1.field : (dp)->dp2.field)
|
(dp)->dp1.field : (dp)->dp2.field)
|
||||||
|
|||||||
+4
-7
@@ -110,10 +110,7 @@ struct fs_ops ufs_fsops = {
|
|||||||
struct file {
|
struct file {
|
||||||
off_t f_seekp; /* seek pointer */
|
off_t f_seekp; /* seek pointer */
|
||||||
struct fs *f_fs; /* pointer to super-block */
|
struct fs *f_fs; /* pointer to super-block */
|
||||||
union dinode {
|
union dinode f_dp; /* copy of on-disk inode */
|
||||||
struct ufs1_dinode di1;
|
|
||||||
struct ufs2_dinode di2;
|
|
||||||
} f_di; /* copy of on-disk inode */
|
|
||||||
int f_nindir[UFS_NIADDR];
|
int f_nindir[UFS_NIADDR];
|
||||||
/* number of blocks mapped by
|
/* number of blocks mapped by
|
||||||
indirect block at level i */
|
indirect block at level i */
|
||||||
@@ -129,7 +126,7 @@ struct file {
|
|||||||
};
|
};
|
||||||
#define DIP(fp, field) \
|
#define DIP(fp, field) \
|
||||||
((fp)->f_fs->fs_magic == FS_UFS1_MAGIC ? \
|
((fp)->f_fs->fs_magic == FS_UFS1_MAGIC ? \
|
||||||
(fp)->f_di.di1.field : (fp)->f_di.di2.field)
|
(fp)->f_dp.dp1.field : (fp)->f_dp.dp2.field)
|
||||||
|
|
||||||
typedef struct ufs_mnt {
|
typedef struct ufs_mnt {
|
||||||
char *um_dev;
|
char *um_dev;
|
||||||
@@ -185,10 +182,10 @@ read_inode(ino_t inumber, struct open_file *f)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fp->f_fs->fs_magic == FS_UFS1_MAGIC)
|
if (fp->f_fs->fs_magic == FS_UFS1_MAGIC)
|
||||||
fp->f_di.di1 = ((struct ufs1_dinode *)buf)
|
fp->f_dp.dp1 = ((struct ufs1_dinode *)buf)
|
||||||
[ino_to_fsbo(fs, inumber)];
|
[ino_to_fsbo(fs, inumber)];
|
||||||
else
|
else
|
||||||
fp->f_di.di2 = ((struct ufs2_dinode *)buf)
|
fp->f_dp.dp2 = ((struct ufs2_dinode *)buf)
|
||||||
[ino_to_fsbo(fs, inumber)];
|
[ino_to_fsbo(fs, inumber)];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
+17
-3
@@ -111,12 +111,13 @@ typedef int64_t ufs_time_t;
|
|||||||
#define IFWHT 0160000 /* Whiteout. */
|
#define IFWHT 0160000 /* Whiteout. */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A dinode contains all the meta-data associated with a UFS2 file.
|
* Each UFS filesystem version defines the on-disk format of its dinode.
|
||||||
* This structure defines the on-disk format of a dinode. Since
|
*
|
||||||
|
* A UFS2 dinode contains all the meta-data associated with a UFS2 file.
|
||||||
|
* This structure defines the on-disk format of a UFS2 dinode. Since
|
||||||
* this structure describes an on-disk structure, all its fields
|
* this structure describes an on-disk structure, all its fields
|
||||||
* are defined by types with precise widths.
|
* are defined by types with precise widths.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define UFS_NXADDR 2 /* External addresses in inode. */
|
#define UFS_NXADDR 2 /* External addresses in inode. */
|
||||||
#define UFS_NDADDR 12 /* Direct addresses in inode. */
|
#define UFS_NDADDR 12 /* Direct addresses in inode. */
|
||||||
#define UFS_NIADDR 3 /* Indirect addresses in inode. */
|
#define UFS_NIADDR 3 /* Indirect addresses in inode. */
|
||||||
@@ -210,4 +211,17 @@ struct ufs1_dinode {
|
|||||||
|
|
||||||
#define UFS_LINK_MAX 65500 /* leave a few spare for special values */
|
#define UFS_LINK_MAX 65500 /* leave a few spare for special values */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These structures hold or reference an on-disk dinode.
|
||||||
|
*/
|
||||||
|
union dinode {
|
||||||
|
struct ufs1_dinode dp1;
|
||||||
|
struct ufs2_dinode dp2;
|
||||||
|
};
|
||||||
|
|
||||||
|
union dinodep {
|
||||||
|
struct ufs1_dinode *dp1;
|
||||||
|
struct ufs2_dinode *dp2;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _UFS_UFS_DINODE_H_ */
|
#endif /* _UFS_UFS_DINODE_H_ */
|
||||||
|
|||||||
+3
-6
@@ -88,10 +88,7 @@ struct inode {
|
|||||||
/*
|
/*
|
||||||
* The real copy of the on-disk inode.
|
* The real copy of the on-disk inode.
|
||||||
*/
|
*/
|
||||||
union {
|
union dinodep i_dp; /* On-disk dinode */
|
||||||
struct ufs1_dinode *din1; /* UFS1 on-disk dinode. */
|
|
||||||
struct ufs2_dinode *din2; /* UFS2 on-disk dinode. */
|
|
||||||
} dinode_u;
|
|
||||||
|
|
||||||
ino_t i_number; /* The identity of the inode. */
|
ino_t i_number; /* The identity of the inode. */
|
||||||
uint32_t i_flag; /* flags, see below */
|
uint32_t i_flag; /* flags, see below */
|
||||||
@@ -204,8 +201,8 @@ struct inode {
|
|||||||
|
|
||||||
#define i_dirhash i_un.dirhash
|
#define i_dirhash i_un.dirhash
|
||||||
#define i_snapblklist i_un.snapblklist
|
#define i_snapblklist i_un.snapblklist
|
||||||
#define i_din1 dinode_u.din1
|
#define i_din1 i_dp.dp1
|
||||||
#define i_din2 dinode_u.din2
|
#define i_din2 i_dp.dp2
|
||||||
|
|
||||||
#define ITOUMP(ip) ((ip)->i_ump)
|
#define ITOUMP(ip) ((ip)->i_ump)
|
||||||
#define ITODEV(ip) (ITOUMP(ip)->um_dev)
|
#define ITODEV(ip) (ITOUMP(ip)->um_dev)
|
||||||
|
|||||||
+11
-11
@@ -106,7 +106,7 @@
|
|||||||
#undef DIP
|
#undef DIP
|
||||||
#define DIP(dp, field) \
|
#define DIP(dp, field) \
|
||||||
((ffs_opts->version == 1) ? \
|
((ffs_opts->version == 1) ? \
|
||||||
(dp)->ffs1_din.di_##field : (dp)->ffs2_din.di_##field)
|
(dp)->dp1.di_##field : (dp)->dp2.di_##field)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Various file system defaults (cribbed from newfs(8)).
|
* Various file system defaults (cribbed from newfs(8)).
|
||||||
@@ -853,10 +853,10 @@ ffs_populate_dir(const char *dir, fsnode *root, fsinfo_t *fsopts)
|
|||||||
|
|
||||||
/* build on-disk inode */
|
/* build on-disk inode */
|
||||||
if (ffs_opts->version == 1)
|
if (ffs_opts->version == 1)
|
||||||
membuf = ffs_build_dinode1(&din.ffs1_din, &dirbuf, cur,
|
membuf = ffs_build_dinode1(&din.dp1, &dirbuf, cur,
|
||||||
root, fsopts);
|
root, fsopts);
|
||||||
else
|
else
|
||||||
membuf = ffs_build_dinode2(&din.ffs2_din, &dirbuf, cur,
|
membuf = ffs_build_dinode2(&din.dp2, &dirbuf, cur,
|
||||||
root, fsopts);
|
root, fsopts);
|
||||||
|
|
||||||
if (debug & DEBUG_FS_POPULATE_NODE) {
|
if (debug & DEBUG_FS_POPULATE_NODE) {
|
||||||
@@ -942,11 +942,11 @@ ffs_write_file(union dinode *din, uint32_t ino, void *buf, fsinfo_t *fsopts)
|
|||||||
in.i_number = ino;
|
in.i_number = ino;
|
||||||
in.i_size = DIP(din, size);
|
in.i_size = DIP(din, size);
|
||||||
if (ffs_opts->version == 1)
|
if (ffs_opts->version == 1)
|
||||||
memcpy(&in.i_din.ffs1_din, &din->ffs1_din,
|
memcpy(&in.i_din.dp1, &din->dp1,
|
||||||
sizeof(in.i_din.ffs1_din));
|
sizeof(in.i_din.dp1));
|
||||||
else
|
else
|
||||||
memcpy(&in.i_din.ffs2_din, &din->ffs2_din,
|
memcpy(&in.i_din.dp2, &din->dp2,
|
||||||
sizeof(in.i_din.ffs2_din));
|
sizeof(in.i_din.dp2));
|
||||||
|
|
||||||
if (DIP(din, size) == 0)
|
if (DIP(din, size) == 0)
|
||||||
goto write_inode_and_leave; /* mmm, cheating */
|
goto write_inode_and_leave; /* mmm, cheating */
|
||||||
@@ -1176,16 +1176,16 @@ ffs_write_inode(union dinode *dp, uint32_t ino, const fsinfo_t *fsopts)
|
|||||||
ffs_rdfs(d, fs->fs_bsize, buf, fsopts);
|
ffs_rdfs(d, fs->fs_bsize, buf, fsopts);
|
||||||
if (fsopts->needswap) {
|
if (fsopts->needswap) {
|
||||||
if (ffs_opts->version == 1)
|
if (ffs_opts->version == 1)
|
||||||
ffs_dinode1_swap(&dp->ffs1_din,
|
ffs_dinode1_swap(&dp->dp1,
|
||||||
&dp1[ino_to_fsbo(fs, ino)]);
|
&dp1[ino_to_fsbo(fs, ino)]);
|
||||||
else
|
else
|
||||||
ffs_dinode2_swap(&dp->ffs2_din,
|
ffs_dinode2_swap(&dp->dp2,
|
||||||
&dp2[ino_to_fsbo(fs, ino)]);
|
&dp2[ino_to_fsbo(fs, ino)]);
|
||||||
} else {
|
} else {
|
||||||
if (ffs_opts->version == 1)
|
if (ffs_opts->version == 1)
|
||||||
dp1[ino_to_fsbo(fs, ino)] = dp->ffs1_din;
|
dp1[ino_to_fsbo(fs, ino)] = dp->dp1;
|
||||||
else
|
else
|
||||||
dp2[ino_to_fsbo(fs, ino)] = dp->ffs2_din;
|
dp2[ino_to_fsbo(fs, ino)] = dp->dp2;
|
||||||
}
|
}
|
||||||
ffs_wtfs(d, fs->fs_bsize, buf, fsopts);
|
ffs_wtfs(d, fs->fs_bsize, buf, fsopts);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|||||||
@@ -37,11 +37,6 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
union dinode {
|
|
||||||
struct ufs1_dinode ffs1_din;
|
|
||||||
struct ufs2_dinode ffs2_din;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct inode {
|
struct inode {
|
||||||
ino_t i_number; /* The identity of the inode. */
|
ino_t i_number; /* The identity of the inode. */
|
||||||
struct vnode *i_devvp; /* vnode pointer (contains fsopts) */
|
struct vnode *i_devvp; /* vnode pointer (contains fsopts) */
|
||||||
@@ -50,45 +45,45 @@ struct inode {
|
|||||||
uint64_t i_size;
|
uint64_t i_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define i_ffs1_atime i_din.ffs1_din.di_atime
|
#define i_ffs1_atime i_din.dp1.di_atime
|
||||||
#define i_ffs1_atimensec i_din.ffs1_din.di_atimensec
|
#define i_ffs1_atimensec i_din.dp1.di_atimensec
|
||||||
#define i_ffs1_blocks i_din.ffs1_din.di_blocks
|
#define i_ffs1_blocks i_din.dp1.di_blocks
|
||||||
#define i_ffs1_ctime i_din.ffs1_din.di_ctime
|
#define i_ffs1_ctime i_din.dp1.di_ctime
|
||||||
#define i_ffs1_ctimensec i_din.ffs1_din.di_ctimensec
|
#define i_ffs1_ctimensec i_din.dp1.di_ctimensec
|
||||||
#define i_ffs1_db i_din.ffs1_din.di_db
|
#define i_ffs1_db i_din.dp1.di_db
|
||||||
#define i_ffs1_flags i_din.ffs1_din.di_flags
|
#define i_ffs1_flags i_din.dp1.di_flags
|
||||||
#define i_ffs1_gen i_din.ffs1_din.di_gen
|
#define i_ffs1_gen i_din.dp1.di_gen
|
||||||
#define i_ffs11_gid i_din.ffs1_din.di_gid
|
#define i_ffs11_gid i_din.dp1.di_gid
|
||||||
#define i_ffs1_ib i_din.ffs1_din.di_ib
|
#define i_ffs1_ib i_din.dp1.di_ib
|
||||||
#define i_ffs1_mode i_din.ffs1_din.di_mode
|
#define i_ffs1_mode i_din.dp1.di_mode
|
||||||
#define i_ffs1_mtime i_din.ffs1_din.di_mtime
|
#define i_ffs1_mtime i_din.dp1.di_mtime
|
||||||
#define i_ffs1_mtimensec i_din.ffs1_din.di_mtimensec
|
#define i_ffs1_mtimensec i_din.dp1.di_mtimensec
|
||||||
#define i_ffs1_nlink i_din.ffs1_din.di_nlink
|
#define i_ffs1_nlink i_din.dp1.di_nlink
|
||||||
#define i_ffs1_rdev i_din.ffs1_din.di_rdev
|
#define i_ffs1_rdev i_din.dp1.di_rdev
|
||||||
#define i_ffs1_shortlink i_din.ffs1_din.di_shortlink
|
#define i_ffs1_shortlink i_din.dp1.di_shortlink
|
||||||
#define i_ffs1_size i_din.ffs1_din.di_size
|
#define i_ffs1_size i_din.dp1.di_size
|
||||||
#define i_ffs1_uid i_din.ffs1_din.di_uid
|
#define i_ffs1_uid i_din.dp1.di_uid
|
||||||
|
|
||||||
#define i_ffs2_atime i_din.ffs2_din.di_atime
|
#define i_ffs2_atime i_din.dp2.di_atime
|
||||||
#define i_ffs2_atimensec i_din.ffs2_din.di_atimensec
|
#define i_ffs2_atimensec i_din.dp2.di_atimensec
|
||||||
#define i_ffs2_blocks i_din.ffs2_din.di_blocks
|
#define i_ffs2_blocks i_din.dp2.di_blocks
|
||||||
#define i_ffs2_ctime i_din.ffs2_din.di_ctime
|
#define i_ffs2_ctime i_din.dp2.di_ctime
|
||||||
#define i_ffs2_ctimensec i_din.ffs2_din.di_ctimensec
|
#define i_ffs2_ctimensec i_din.dp2.di_ctimensec
|
||||||
#define i_ffs2_birthtime i_din.ffs2_din.di_birthtime
|
#define i_ffs2_birthtime i_din.dp2.di_birthtime
|
||||||
#define i_ffs2_birthnsec i_din.ffs2_din.di_birthnsec
|
#define i_ffs2_birthnsec i_din.dp2.di_birthnsec
|
||||||
#define i_ffs2_db i_din.ffs2_din.di_db
|
#define i_ffs2_db i_din.dp2.di_db
|
||||||
#define i_ffs2_flags i_din.ffs2_din.di_flags
|
#define i_ffs2_flags i_din.dp2.di_flags
|
||||||
#define i_ffs2_gen i_din.ffs2_din.di_gen
|
#define i_ffs2_gen i_din.dp2.di_gen
|
||||||
#define i_ffs21_gid i_din.ffs2_din.di_gid
|
#define i_ffs21_gid i_din.dp2.di_gid
|
||||||
#define i_ffs2_ib i_din.ffs2_din.di_ib
|
#define i_ffs2_ib i_din.dp2.di_ib
|
||||||
#define i_ffs2_mode i_din.ffs2_din.di_mode
|
#define i_ffs2_mode i_din.dp2.di_mode
|
||||||
#define i_ffs2_mtime i_din.ffs2_din.di_mtime
|
#define i_ffs2_mtime i_din.dp2.di_mtime
|
||||||
#define i_ffs2_mtimensec i_din.ffs2_din.di_mtimensec
|
#define i_ffs2_mtimensec i_din.dp2.di_mtimensec
|
||||||
#define i_ffs2_nlink i_din.ffs2_din.di_nlink
|
#define i_ffs2_nlink i_din.dp2.di_nlink
|
||||||
#define i_ffs2_rdev i_din.ffs2_din.di_rdev
|
#define i_ffs2_rdev i_din.dp2.di_rdev
|
||||||
#define i_ffs2_shortlink i_din.ffs2_din.di_shortlink
|
#define i_ffs2_shortlink i_din.dp2.di_shortlink
|
||||||
#define i_ffs2_size i_din.ffs2_din.di_size
|
#define i_ffs2_size i_din.dp2.di_size
|
||||||
#define i_ffs2_uid i_din.ffs2_din.di_uid
|
#define i_ffs2_uid i_din.dp2.di_uid
|
||||||
|
|
||||||
#undef DIP
|
#undef DIP
|
||||||
#define DIP(ip, field) \
|
#define DIP(ip, field) \
|
||||||
|
|||||||
@@ -97,10 +97,6 @@ static void quot(char *, char *);
|
|||||||
(((fs)->fs_magic == FS_UFS1_MAGIC ? sizeof(struct ufs1_dinode) : \
|
(((fs)->fs_magic == FS_UFS1_MAGIC ? sizeof(struct ufs1_dinode) : \
|
||||||
sizeof(struct ufs2_dinode)) * INOCNT(fs))
|
sizeof(struct ufs2_dinode)) * INOCNT(fs))
|
||||||
|
|
||||||
union dinode {
|
|
||||||
struct ufs1_dinode dp1;
|
|
||||||
struct ufs2_dinode dp2;
|
|
||||||
};
|
|
||||||
#define DIP(fs, dp, field) \
|
#define DIP(fs, dp, field) \
|
||||||
(((fs)->fs_magic == FS_UFS1_MAGIC) ? \
|
(((fs)->fs_magic == FS_UFS1_MAGIC) ? \
|
||||||
(dp)->dp1.field : (dp)->dp2.field)
|
(dp)->dp1.field : (dp)->dp2.field)
|
||||||
|
|||||||
Reference in New Issue
Block a user