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