Changeset View
Changeset View
Standalone View
Standalone View
sys/boot/common/ufsread.c
Show First 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | #elif defined(UFS2_ONLY) | ||||
fs.fs_sblockloc == sblock_try[n]) | fs.fs_sblockloc == sblock_try[n]) | ||||
#else | #else | ||||
fs.fs_magic == FS_UFS1_MAGIC || | fs.fs_magic == FS_UFS1_MAGIC || | ||||
(fs.fs_magic == FS_UFS2_MAGIC && | (fs.fs_magic == FS_UFS2_MAGIC && | ||||
fs.fs_sblockloc == sblock_try[n]) | fs.fs_sblockloc == sblock_try[n]) | ||||
#endif | #endif | ||||
) && | ) && | ||||
fs.fs_bsize <= MAXBSIZE && | fs.fs_bsize <= MAXBSIZE && | ||||
fs.fs_bsize >= sizeof(struct fs)) | fs.fs_bsize >= (int32_t)sizeof(struct fs)) | ||||
break; | break; | ||||
} | } | ||||
if (sblock_try[n] == -1) { | if (sblock_try[n] == -1) { | ||||
return -1; | return -1; | ||||
} | } | ||||
dsk_meta++; | dsk_meta++; | ||||
} else | } else | ||||
memcpy(&fs, dmadat->sbbuf, sizeof(struct fs)); | memcpy(&fs, dmadat->sbbuf, sizeof(struct fs)); | ||||
if (!inode) | if (!inode) | ||||
return 0; | return 0; | ||||
if (inomap != inode) { | if (inomap != inode) { | ||||
n = IPERVBLK(&fs); | n = IPERVBLK(&fs); | ||||
if (dskread(blkbuf, INO_TO_VBA(&fs, n, inode), DBPERVBLK)) | if (dskread(blkbuf, INO_TO_VBA(&fs, n, inode), DBPERVBLK)) | ||||
return -1; | return -1; | ||||
n = INO_TO_VBO(n, inode); | n = INO_TO_VBO(n, inode); | ||||
#if defined(UFS1_ONLY) | #if defined(UFS1_ONLY) | ||||
memcpy(&dp1, (struct ufs1_dinode *)blkbuf + n, | memcpy(&dp1, (struct ufs1_dinode *)blkbuf + n, | ||||
sizeof(struct ufs1_dinode)); | sizeof(struct ufs1_dinode)); | ||||
#elif defined(UFS2_ONLY) | #elif defined(UFS2_ONLY) | ||||
memcpy(&dp2, (struct ufs2_dinode *)blkbuf + n, | memcpy(&dp2, (struct ufs2_dinode *)blkbuf + n, | ||||
sizeof(struct ufs2_dinode)); | sizeof(struct ufs2_dinode)); | ||||
#else | #else | ||||
if (fs.fs_magic == FS_UFS1_MAGIC) | if (fs.fs_magic == FS_UFS1_MAGIC) | ||||
memcpy(&dp1, (struct ufs1_dinode *)blkbuf + n, | memcpy(&dp1, (struct ufs1_dinode *)(void *)blkbuf + n, | ||||
sizeof(struct ufs1_dinode)); | sizeof(struct ufs1_dinode)); | ||||
else | else | ||||
memcpy(&dp2, (struct ufs2_dinode *)blkbuf + n, | memcpy(&dp2, (struct ufs2_dinode *)(void *)blkbuf + n, | ||||
sizeof(struct ufs2_dinode)); | sizeof(struct ufs2_dinode)); | ||||
#endif | #endif | ||||
inomap = inode; | inomap = inode; | ||||
fs_off = 0; | fs_off = 0; | ||||
blkmap = indmap = 0; | blkmap = indmap = 0; | ||||
} | } | ||||
s = buf; | s = buf; | ||||
size = DIP(di_size); | size = DIP(di_size); | ||||
Show All 32 Lines | #else | ||||
} else | } else | ||||
memcpy(&addr2, (ufs2_daddr_t *)indbuf + n, | memcpy(&addr2, (ufs2_daddr_t *)indbuf + n, | ||||
sizeof(ufs2_daddr_t)); | sizeof(ufs2_daddr_t)); | ||||
#endif | #endif | ||||
} else | } else | ||||
return -1; | return -1; | ||||
vbaddr = fsbtodb(&fs, addr2) + (off >> VBLKSHIFT) * DBPERVBLK; | vbaddr = fsbtodb(&fs, addr2) + (off >> VBLKSHIFT) * DBPERVBLK; | ||||
vboff = off & VBLKMASK; | vboff = off & VBLKMASK; | ||||
n = sblksize(&fs, size, lbn) - (off & ~VBLKMASK); | n = sblksize(&fs, (off_t)size, lbn) - (off & ~VBLKMASK); | ||||
if (n > VBLKSIZE) | if (n > VBLKSIZE) | ||||
n = VBLKSIZE; | n = VBLKSIZE; | ||||
if (blkmap != vbaddr) { | if (blkmap != vbaddr) { | ||||
if (dskread(blkbuf, vbaddr, n >> DEV_BSHIFT)) | if (dskread(blkbuf, vbaddr, n >> DEV_BSHIFT)) | ||||
return -1; | return -1; | ||||
blkmap = vbaddr; | blkmap = vbaddr; | ||||
} | } | ||||
n -= vboff; | n -= vboff; | ||||
Show All 9 Lines |