readufs.h revision 1.3
11.2Sminoura/*	from Id: readufs.h,v 1.7 2002/01/26 15:55:51 itohy Exp 	*/
21.1Sminoura
31.1Sminoura/*
41.1Sminoura * Written by ITOH, Yasufumi (itohy@netbsd.org)
51.1Sminoura * Public domain.
61.1Sminoura */
71.1Sminoura
81.1Sminoura#include <ufs/ufs/dir.h>
91.1Sminoura
101.1Sminoura/*
111.1Sminoura * filesystem information
121.1Sminoura */
131.1Sminourastruct ufs_info {
141.1Sminoura	enum ufs_fstype {
151.1Sminoura		UFSTYPE_UNKNOWN
161.1Sminoura#ifdef USE_FFS
171.1Sminoura		, UFSTYPE_FFS
181.1Sminoura#endif
191.1Sminoura#ifdef USE_LFS
201.1Sminoura		, UFSTYPE_LFS
211.1Sminoura#endif
221.1Sminoura	} fstype;
231.1Sminoura	int (*get_inode) __P((ino_t ino, struct dinode *dibuf));
241.1Sminoura
251.1Sminoura	/* superblock information */
261.1Sminoura	u_int32_t bsize;	/* fs block size */
271.1Sminoura	u_int32_t nindir;	/* # indirect per block */
281.1Sminoura	u_int32_t fsbtodb;	/* block -> sector shift count */
291.1Sminoura	union {
301.1Sminoura#ifdef USE_FFS
311.1Sminoura		struct {
321.3Sfvdl			int32_t iblkno;	/* inode-block offset */
331.1Sminoura			int32_t cgoffset;	/* cylinder group offset */
341.1Sminoura			int32_t cgmask;		/* cylinder group mask */
351.1Sminoura			int32_t fragshift;	/* block to fragmentation */
361.1Sminoura			int32_t inopb;		/* # inodes per block */
371.1Sminoura			int32_t ipg;		/* # inodes per group */
381.1Sminoura			int32_t fpg;		/* # inodes per group * frag */
391.1Sminoura		} u_ffs;
401.1Sminoura#endif
411.1Sminoura#ifdef USE_LFS
421.1Sminoura		struct {
431.2Sminoura			u_int32_t version;	/* LFS version # */
441.3Sfvdl			int32_t idaddr;		/* ifile inode disk address */
451.2Sminoura			u_int32_t inopb;	/* inodes per block (v1) */
461.2Sminoura						/* inodes per frag (v2) */
471.1Sminoura			u_int32_t ifpb;		/* inode addrs / ifile block */
481.2Sminoura			u_int32_t ioffset;	/* start of inode in ifile */
491.2Sminoura						/* (in sector) */
501.2Sminoura			u_int32_t ibsize;	/* size of inode block */
511.1Sminoura		} u_lfs;
521.1Sminoura#endif
531.1Sminoura	} fs_u;
541.1Sminoura};
551.1Sminoura
561.1Sminouraextern struct ufs_info	ufs_info;
571.1Sminoura#define ufs_get_inode(ino, di)	((*ufs_info.get_inode)((ino), (di)))
581.1Sminoura
591.3Sfvdlvoid RAW_READ __P((void *buf, daddr_t blkpos, size_t bytelen));
601.1Sminoura
611.1Sminourasize_t ufs_read __P((struct dinode *di, void *buf, unsigned off, size_t count));
621.1Sminouraino_t ufs_lookup __P((ino_t dirino, const char *fn));
631.1Sminouraino_t ufs_lookup_path __P((const char *path));
641.1Sminourasize_t ufs_load_file __P((void *buf, ino_t dirino, const char *fn));
651.1Sminouraint ufs_init __P((void));
661.1Sminoura
671.1Sminoura#ifdef USE_FFS
681.1Sminouraint try_ffs __P((void));
691.1Sminoura#endif
701.1Sminoura
711.1Sminoura#ifdef USE_LFS
721.1Sminouraint try_lfs __P((void));
731.1Sminoura#endif
741.1Sminoura
751.1Sminoura#ifdef DEBUG_WITH_STDIO
761.1Sminoura#include <fcntl.h>
771.1Sminoura#include <err.h>
781.1Sminoura#include <stdio.h>
791.1Sminoura#include <unistd.h>
801.1Sminoura#include <stdlib.h>
811.1Sminoura#endif
82