Changeset View
Changeset View
Standalone View
Standalone View
stand/libsa/ufsread.h
- This file was added.
#ifndef UFSREAD_H | |||||
#define UFSREAD_H | |||||
typedef uint32_t ufs_ino_t; | |||||
/* | |||||
* We use 4k `virtual' blocks for filesystem data, whatever the actual | |||||
* filesystem block size. FFS blocks are always a multiple of 4k. | |||||
*/ | |||||
#define VBLKSHIFT 12 | |||||
#define VBLKSIZE (1 << VBLKSHIFT) | |||||
#define VBLKMASK (VBLKSIZE - 1) | |||||
#define DBPERVBLK (VBLKSIZE / DEV_BSIZE) | |||||
#define INDIRPERVBLK(fs) (NINDIR(fs) / ((fs)->fs_bsize >> VBLKSHIFT)) | |||||
#define IPERVBLK(fs) (INOPB(fs) / ((fs)->fs_bsize >> VBLKSHIFT)) | |||||
#define INO_TO_VBA(fs, ipervblk, x) \ | |||||
(fsbtodb(fs, cgimin(fs, ino_to_cg(fs, x))) + \ | |||||
(((x) % (fs)->fs_ipg) / (ipervblk) * DBPERVBLK)) | |||||
#define INO_TO_VBO(ipervblk, x) ((x) % ipervblk) | |||||
#define FS_TO_VBA(fs, fsb, off) (fsbtodb(fs, fsb) + \ | |||||
((off) / VBLKSIZE) * DBPERVBLK) | |||||
#define FS_TO_VBO(fs, fsb, off) ((off) & VBLKMASK) | |||||
/* Buffers that must not span a 64k boundary. */ | |||||
struct dmadat { | |||||
char blkbuf[VBLKSIZE]; /* filesystem blocks */ | |||||
char indbuf[VBLKSIZE]; /* indir blocks */ | |||||
char sbbuf[SBLOCKSIZE]; /* superblock */ | |||||
char secbuf[DEV_BSIZE]; /* for MBR/disklabel */ | |||||
}; | |||||
extern struct dmadat *dmadat; | |||||
extern uint8_t ls, dsk_meta; | |||||
extern uint32_t fs_off; | |||||
ufs_ino_t lookup(const char *); | |||||
ssize_t fsread(ufs_ino_t, void *, size_t); | |||||
ssize_t fsread_size(ufs_ino_t, void *, size_t, size_t *); | |||||
#endif /* UFSREAD_H */ |