199193Sjmallett/* 299193Sjmallett * Copyright (c) 2002 Juli Mallett. All rights reserved. 399193Sjmallett * 499193Sjmallett * This software was written by Juli Mallett <jmallett@FreeBSD.org> for the 599193Sjmallett * FreeBSD project. Redistribution and use in source and binary forms, with 699193Sjmallett * or without modification, are permitted provided that the following 799193Sjmallett * conditions are met: 899193Sjmallett * 999193Sjmallett * 1. Redistribution of source code must retain the above copyright notice, 1099193Sjmallett * this list of conditions and the following disclaimer. 1199193Sjmallett * 2. Redistribution in binary form must reproduce the above copyright 1299193Sjmallett * notice, this list of conditions and the following disclaimer in the 1399193Sjmallett * documentation and/or other materials provided with the distribution. 1499193Sjmallett * 1599193Sjmallett * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1699193Sjmallett * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1799193Sjmallett * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1899193Sjmallett * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 1999193Sjmallett * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2099193Sjmallett * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2199193Sjmallett * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2299193Sjmallett * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 2399193Sjmallett * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 2499193Sjmallett * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2599193Sjmallett * POSSIBILITY OF SUCH DAMAGE. 2699193Sjmallett * 2799193Sjmallett * $FreeBSD: releng/10.2/lib/libufs/libufs.h 218601 2011-02-12 12:46:00Z kib $ 2899193Sjmallett */ 2999193Sjmallett 30102296Sjmallett#ifndef __LIBUFS_H__ 31102296Sjmallett#define __LIBUFS_H__ 32102296Sjmallett 3399193Sjmallett/* 3499193Sjmallett * libufs structures. 3599193Sjmallett */ 3699193Sjmallett 3799193Sjmallett/* 3899193Sjmallett * userland ufs disk. 3999193Sjmallett */ 4099193Sjmallettstruct uufsd { 4199193Sjmallett const char *d_name; /* disk name */ 4299193Sjmallett int d_ufs; /* decimal UFS version */ 4399193Sjmallett int d_fd; /* raw device file descriptor */ 4499193Sjmallett long d_bsize; /* device bsize */ 4599193Sjmallett ufs2_daddr_t d_sblock; /* superblock location */ 46207141Sjeff struct csum *d_sbcsum; /* Superblock summary info */ 4799193Sjmallett caddr_t d_inoblock; /* inode block */ 4899193Sjmallett ino_t d_inomin; /* low inode */ 4999193Sjmallett ino_t d_inomax; /* high inode */ 5099193Sjmallett union { 5199193Sjmallett struct fs d_fs; /* filesystem information */ 5299193Sjmallett char d_sb[MAXBSIZE]; 5399193Sjmallett /* superblock as buffer */ 5499193Sjmallett } d_sbunion; 55109509Sjmallett union { 56109509Sjmallett struct cg d_cg; /* cylinder group */ 57109509Sjmallett char d_buf[MAXBSIZE]; 58109509Sjmallett /* cylinder group storage */ 59109509Sjmallett } d_cgunion; 60109509Sjmallett int d_ccg; /* current cylinder group */ 61109518Sjmallett int d_lcg; /* last cylinder group (in d_cg) */ 62105737Sjmallett const char *d_error; /* human readable disk error */ 63109506Sjmallett int d_mine; /* internal flags */ 6499193Sjmallett#define d_fs d_sbunion.d_fs 6599193Sjmallett#define d_sb d_sbunion.d_sb 66109509Sjmallett#define d_cg d_cgunion.d_cg 6799193Sjmallett}; 6899193Sjmallett 69218601Skib/* 70218601Skib * libufs macros (internal, non-exported). 71218601Skib */ 72218601Skib#ifdef _LIBUFS 73218601Skib/* 74218601Skib * Trace steps through libufs, to be used at entry and erroneous return. 75218601Skib */ 76218601Skibstatic inline void 77218601SkibERROR(struct uufsd *u, const char *str) 78218601Skib{ 79218601Skib 80218601Skib#ifdef _LIBUFS_DEBUGGING 81218601Skib if (str != NULL) { 82218601Skib fprintf(stderr, "libufs: %s", str); 83218601Skib if (errno != 0) 84218601Skib fprintf(stderr, ": %s", strerror(errno)); 85218601Skib fprintf(stderr, "\n"); 86218601Skib } 87218601Skib#endif 88218601Skib if (u != NULL) 89218601Skib u->d_error = str; 90218601Skib} 91218601Skib#endif /* _LIBUFS */ 92218601Skib 93102296Sjmallett__BEGIN_DECLS 94102296Sjmallett 9599193Sjmallett/* 9699193Sjmallett * libufs prototypes. 9799193Sjmallett */ 9899193Sjmallett 9999193Sjmallett/* 10099193Sjmallett * block.c 10199193Sjmallett */ 10299193Sjmallettssize_t bread(struct uufsd *, ufs2_daddr_t, void *, size_t); 10399193Sjmallettssize_t bwrite(struct uufsd *, ufs2_daddr_t, const void *, size_t); 104174668Sphkint berase(struct uufsd *, ufs2_daddr_t, ufs2_daddr_t); 10599193Sjmallett 10699193Sjmallett/* 107109509Sjmallett * cgroup.c 108109509Sjmallett */ 109207141Sjeffufs2_daddr_t cgballoc(struct uufsd *); 110207141Sjeffint cgbfree(struct uufsd *, ufs2_daddr_t, long); 111207141Sjeffino_t cgialloc(struct uufsd *); 112109509Sjmallettint cgread(struct uufsd *); 113109509Sjmallettint cgread1(struct uufsd *, int); 114207141Sjeffint cgwrite(struct uufsd *); 115163835Spjdint cgwrite1(struct uufsd *, int); 116109509Sjmallett 117109509Sjmallett/* 11899193Sjmallett * inode.c 11999193Sjmallett */ 12099193Sjmallettint getino(struct uufsd *, void **, ino_t, int *); 121207141Sjeffint putino(struct uufsd *); 12299193Sjmallett 12399193Sjmallett/* 12499193Sjmallett * sblock.c 12599193Sjmallett */ 12699193Sjmallettint sbread(struct uufsd *); 12799193Sjmallettint sbwrite(struct uufsd *, int); 12899193Sjmallett 12999193Sjmallett/* 13099193Sjmallett * type.c 13199193Sjmallett */ 13299193Sjmallettint ufs_disk_close(struct uufsd *); 13399193Sjmallettint ufs_disk_fillout(struct uufsd *, const char *); 134109755Sjmallettint ufs_disk_fillout_blank(struct uufsd *, const char *); 135110066Sjmallettint ufs_disk_write(struct uufsd *); 136102296Sjmallett 137207141Sjeff/* 138207141Sjeff * ffs_subr.c 139207141Sjeff */ 140207141Sjeffvoid ffs_clrblock(struct fs *, u_char *, ufs1_daddr_t); 141207141Sjeffvoid ffs_clusteracct(struct fs *, struct cg *, ufs1_daddr_t, int); 142207141Sjeffvoid ffs_fragacct(struct fs *, int, int32_t [], int); 143207141Sjeffint ffs_isblock(struct fs *, u_char *, ufs1_daddr_t); 144207141Sjeffint ffs_isfreeblock(struct fs *, u_char *, ufs1_daddr_t); 145207141Sjeffvoid ffs_setblock(struct fs *, u_char *, ufs1_daddr_t); 146207141Sjeff 147102296Sjmallett__END_DECLS 148102296Sjmallett 149102296Sjmallett#endif /* __LIBUFS_H__ */ 150