readufs.h revision 1.1
11.1Sminoura/*	$Id: readufs.h,v 1.1 2001/09/27 10:14:50 minoura 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	int iblkshift;
251.1Sminoura
261.1Sminoura	/* superblock information */
271.1Sminoura	u_int32_t bsize;	/* fs block size */
281.1Sminoura	u_int32_t nindir;	/* # indirect per block */
291.1Sminoura	u_int32_t fsbtodb;	/* block -> sector shift count */
301.1Sminoura	union {
311.1Sminoura#ifdef USE_FFS
321.1Sminoura		struct {
331.1Sminoura			ufs_daddr_t iblkno;	/* inode-block offset */
341.1Sminoura			int32_t cgoffset;	/* cylinder group offset */
351.1Sminoura			int32_t cgmask;		/* cylinder group mask */
361.1Sminoura			int32_t fragshift;	/* block to fragmentation */
371.1Sminoura			int32_t inopb;		/* # inodes per block */
381.1Sminoura			int32_t ipg;		/* # inodes per group */
391.1Sminoura			int32_t fpg;		/* # inodes per group * frag */
401.1Sminoura		} u_ffs;
411.1Sminoura#endif
421.1Sminoura#ifdef USE_LFS
431.1Sminoura		struct {
441.1Sminoura			ufs_daddr_t idaddr;	/* ifile inode disk address */
451.1Sminoura			u_int32_t inopb;	/* inodes per block */
461.1Sminoura			u_int32_t ifpb;		/* inode addrs / ifile block */
471.1Sminoura			u_int32_t cleansz;	/* cleaner info size in block */
481.1Sminoura			u_int32_t segtabsz;	/* segement tab size in block */
491.1Sminoura		} u_lfs;
501.1Sminoura#endif
511.1Sminoura	} fs_u;
521.1Sminoura};
531.1Sminoura
541.1Sminouraextern struct ufs_info	ufs_info;
551.1Sminoura#define ufs_get_inode(ino, di)	((*ufs_info.get_inode)((ino), (di)))
561.1Sminoura
571.1Sminouravoid RAW_READ __P((void *buf, u_int32_t blkpos, size_t bytelen));
581.1Sminoura
591.1Sminourasize_t ufs_read __P((struct dinode *di, void *buf, unsigned off, size_t count));
601.1Sminouraino_t ufs_lookup __P((ino_t dirino, const char *fn));
611.1Sminouraino_t ufs_lookup_path __P((const char *path));
621.1Sminourasize_t ufs_load_file __P((void *buf, ino_t dirino, const char *fn));
631.1Sminouraint ufs_init __P((void));
641.1Sminoura
651.1Sminoura#ifdef USE_FFS
661.1Sminouraint try_ffs __P((void));
671.1Sminoura#endif
681.1Sminoura
691.1Sminoura#ifdef USE_LFS
701.1Sminouraint try_lfs __P((void));
711.1Sminoura#endif
721.1Sminoura
731.1Sminoura#ifdef DEBUG_WITH_STDIO
741.1Sminoura#include <fcntl.h>
751.1Sminoura#include <err.h>
761.1Sminoura#include <stdio.h>
771.1Sminoura#include <unistd.h>
781.1Sminoura#include <stdlib.h>
791.1Sminoura#endif
80