aboutsummaryrefslogtreecommitdiff
path: root/sbin/dump
diff options
context:
space:
mode:
authorIan Dowse <iedowse@FreeBSD.org>2002-07-08 23:53:21 +0000
committerIan Dowse <iedowse@FreeBSD.org>2002-07-08 23:53:21 +0000
commit7680e41ce26dad01d22c3fead1bcf32562f585d8 (patch)
tree08100af48926fc7fd4a07596305e595df3341172 /sbin/dump
parent5e13bcd6c41d77910870e688c705f221421edaca (diff)
Notes
Diffstat (limited to 'sbin/dump')
-rw-r--r--sbin/dump/traverse.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/sbin/dump/traverse.c b/sbin/dump/traverse.c
index b5aab4eac98be..733ac265c0ec4 100644
--- a/sbin/dump/traverse.c
+++ b/sbin/dump/traverse.c
@@ -275,17 +275,20 @@ dirindir(
long *tapesize,
int nodump)
{
+ union {
+ ufs1_daddr_t ufs1[MAXBSIZE / sizeof(ufs1_daddr_t)];
+ ufs2_daddr_t ufs2[MAXBSIZE / sizeof(ufs2_daddr_t)];
+ } idblk;
int ret = 0;
int i;
- char idblk[MAXBSIZE];
- bread(fsbtodb(sblock, blkno), idblk, (int)sblock->fs_bsize);
+ bread(fsbtodb(sblock, blkno), (char *)&idblk, (int)sblock->fs_bsize);
if (ind_level <= 0) {
for (i = 0; *filesize > 0 && i < NINDIR(sblock); i++) {
if (sblock->fs_magic == FS_UFS1_MAGIC)
- blkno = ((ufs1_daddr_t *)idblk)[i];
+ blkno = idblk.ufs1[i];
else
- blkno = ((ufs2_daddr_t *)idblk)[i];
+ blkno = idblk.ufs2[i];
if (blkno != 0)
ret |= searchdir(ino, blkno, sblock->fs_bsize,
*filesize, tapesize, nodump);
@@ -299,9 +302,9 @@ dirindir(
ind_level--;
for (i = 0; *filesize > 0 && i < NINDIR(sblock); i++) {
if (sblock->fs_magic == FS_UFS1_MAGIC)
- blkno = ((ufs1_daddr_t *)idblk)[i];
+ blkno = idblk.ufs1[i];
else
- blkno = ((ufs2_daddr_t *)idblk)[i];
+ blkno = idblk.ufs2[i];
if (blkno != 0)
ret |= dirindir(ino, blkno, ind_level, filesize,
tapesize, nodump);
@@ -498,13 +501,17 @@ dumpino(union dinode *dp, ino_t ino)
static void
dmpindir(ino_t ino, ufs2_daddr_t blk, int ind_level, off_t *size)
{
+ union {
+ ufs1_daddr_t ufs1[MAXBSIZE / sizeof(ufs1_daddr_t)];
+ ufs2_daddr_t ufs2[MAXBSIZE / sizeof(ufs2_daddr_t)];
+ } idblk;
int i, cnt;
- char idblk[MAXBSIZE];
if (blk != 0)
- bread(fsbtodb(sblock, blk), idblk, (int) sblock->fs_bsize);
+ bread(fsbtodb(sblock, blk), (char *)&idblk,
+ (int)sblock->fs_bsize);
else
- memset(idblk, 0, (int)sblock->fs_bsize);
+ memset(&idblk, 0, sblock->fs_bsize);
if (ind_level <= 0) {
if (*size < NINDIR(sblock) * sblock->fs_bsize)
cnt = howmany(*size, sblock->fs_fsize);
@@ -512,19 +519,17 @@ dmpindir(ino_t ino, ufs2_daddr_t blk, int ind_level, off_t *size)
cnt = NINDIR(sblock) * sblock->fs_frag;
*size -= NINDIR(sblock) * sblock->fs_bsize;
if (sblock->fs_magic == FS_UFS1_MAGIC)
- ufs1_blksout((ufs1_daddr_t *)idblk, cnt, ino);
+ ufs1_blksout(idblk.ufs1, cnt, ino);
else
- ufs2_blksout((ufs2_daddr_t *)idblk, cnt, ino);
+ ufs2_blksout(idblk.ufs2, cnt, ino);
return;
}
ind_level--;
for (i = 0; i < NINDIR(sblock); i++) {
if (sblock->fs_magic == FS_UFS1_MAGIC)
- dmpindir(ino, ((ufs1_daddr_t *)idblk)[i], ind_level,
- size);
+ dmpindir(ino, idblk.ufs1[i], ind_level, size);
else
- dmpindir(ino, ((ufs2_daddr_t *)idblk)[i], ind_level,
- size);
+ dmpindir(ino, idblk.ufs2[i], ind_level, size);
if (*size <= 0)
return;
}