158d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
258d4c6c35633437182289e3d226d156d31d3e801San Mehat * Copyright (C) 1995, 1996, 1997 Wolfgang Solfrank
358d4c6c35633437182289e3d226d156d31d3e801San Mehat * Copyright (c) 1995 Martin Husemann
458d4c6c35633437182289e3d226d156d31d3e801San Mehat *
558d4c6c35633437182289e3d226d156d31d3e801San Mehat * Redistribution and use in source and binary forms, with or without
658d4c6c35633437182289e3d226d156d31d3e801San Mehat * modification, are permitted provided that the following conditions
758d4c6c35633437182289e3d226d156d31d3e801San Mehat * are met:
858d4c6c35633437182289e3d226d156d31d3e801San Mehat * 1. Redistributions of source code must retain the above copyright
958d4c6c35633437182289e3d226d156d31d3e801San Mehat *    notice, this list of conditions and the following disclaimer.
1058d4c6c35633437182289e3d226d156d31d3e801San Mehat * 2. Redistributions in binary form must reproduce the above copyright
1158d4c6c35633437182289e3d226d156d31d3e801San Mehat *    notice, this list of conditions and the following disclaimer in the
1258d4c6c35633437182289e3d226d156d31d3e801San Mehat *    documentation and/or other materials provided with the distribution.
1358d4c6c35633437182289e3d226d156d31d3e801San Mehat * 3. All advertising materials mentioning features or use of this software
1458d4c6c35633437182289e3d226d156d31d3e801San Mehat *    must display the following acknowledgement:
1558d4c6c35633437182289e3d226d156d31d3e801San Mehat *	This product includes software developed by Martin Husemann
1658d4c6c35633437182289e3d226d156d31d3e801San Mehat *	and Wolfgang Solfrank.
1758d4c6c35633437182289e3d226d156d31d3e801San Mehat * 4. Neither the name of the University nor the names of its contributors
1858d4c6c35633437182289e3d226d156d31d3e801San Mehat *    may be used to endorse or promote products derived from this software
1958d4c6c35633437182289e3d226d156d31d3e801San Mehat *    without specific prior written permission.
2058d4c6c35633437182289e3d226d156d31d3e801San Mehat *
2158d4c6c35633437182289e3d226d156d31d3e801San Mehat * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
2258d4c6c35633437182289e3d226d156d31d3e801San Mehat * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2358d4c6c35633437182289e3d226d156d31d3e801San Mehat * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2458d4c6c35633437182289e3d226d156d31d3e801San Mehat * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2558d4c6c35633437182289e3d226d156d31d3e801San Mehat * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2658d4c6c35633437182289e3d226d156d31d3e801San Mehat * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2758d4c6c35633437182289e3d226d156d31d3e801San Mehat * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2858d4c6c35633437182289e3d226d156d31d3e801San Mehat * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2958d4c6c35633437182289e3d226d156d31d3e801San Mehat * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3058d4c6c35633437182289e3d226d156d31d3e801San Mehat * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3158d4c6c35633437182289e3d226d156d31d3e801San Mehat *	$NetBSD: ext.h,v 1.6 2000/04/25 23:02:51 jdolecek Exp $
3258d4c6c35633437182289e3d226d156d31d3e801San Mehat * $FreeBSD: src/sbin/fsck_msdosfs/ext.h,v 1.10.20.1 2009/04/15 03:14:26 kensmith Exp $
3358d4c6c35633437182289e3d226d156d31d3e801San Mehat */
3458d4c6c35633437182289e3d226d156d31d3e801San Mehat
3558d4c6c35633437182289e3d226d156d31d3e801San Mehat#ifndef EXT_H
3658d4c6c35633437182289e3d226d156d31d3e801San Mehat#define EXT_H
3758d4c6c35633437182289e3d226d156d31d3e801San Mehat
3858d4c6c35633437182289e3d226d156d31d3e801San Mehat#include <sys/types.h>
3958d4c6c35633437182289e3d226d156d31d3e801San Mehat
4058d4c6c35633437182289e3d226d156d31d3e801San Mehat#include "dosfs.h"
4158d4c6c35633437182289e3d226d156d31d3e801San Mehat
4258d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	LOSTDIR	"LOST.DIR"
4358d4c6c35633437182289e3d226d156d31d3e801San Mehat
4458d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
4558d4c6c35633437182289e3d226d156d31d3e801San Mehat * Options:
4658d4c6c35633437182289e3d226d156d31d3e801San Mehat */
4758d4c6c35633437182289e3d226d156d31d3e801San Mehatextern int alwaysno;	/* assume "no" for all questions */
4858d4c6c35633437182289e3d226d156d31d3e801San Mehatextern int alwaysyes;	/* assume "yes" for all questions */
4958d4c6c35633437182289e3d226d156d31d3e801San Mehatextern int preen;	/* we are preening */
5058d4c6c35633437182289e3d226d156d31d3e801San Mehatextern int rdonly;	/* device is opened read only (supersedes above) */
5158d4c6c35633437182289e3d226d156d31d3e801San Mehatextern int skipclean;	/* skip clean file systems if preening */
5258d4c6c35633437182289e3d226d156d31d3e801San Mehat
5358d4c6c35633437182289e3d226d156d31d3e801San Mehatextern struct dosDirEntry *rootDir;
5458d4c6c35633437182289e3d226d156d31d3e801San Mehat
5558d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
5658d4c6c35633437182289e3d226d156d31d3e801San Mehat * function declarations
5758d4c6c35633437182289e3d226d156d31d3e801San Mehat */
5858d4c6c35633437182289e3d226d156d31d3e801San Mehatint ask(int, const char *, ...);
5958d4c6c35633437182289e3d226d156d31d3e801San Mehat
6058d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
6158d4c6c35633437182289e3d226d156d31d3e801San Mehat * Check the dirty flag.  If the file system is clean, then return 1.
6258d4c6c35633437182289e3d226d156d31d3e801San Mehat * Otherwise, return 0 (this includes the case of FAT12 file systems --
6358d4c6c35633437182289e3d226d156d31d3e801San Mehat * they have no dirty flag, so they must be assumed to be unclean).
6458d4c6c35633437182289e3d226d156d31d3e801San Mehat */
6558d4c6c35633437182289e3d226d156d31d3e801San Mehatint checkdirty(int, struct bootblock *);
6658d4c6c35633437182289e3d226d156d31d3e801San Mehat
6758d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
6858d4c6c35633437182289e3d226d156d31d3e801San Mehat * Check file system given as arg
6958d4c6c35633437182289e3d226d156d31d3e801San Mehat */
7058d4c6c35633437182289e3d226d156d31d3e801San Mehatint checkfilesys(const char *);
7158d4c6c35633437182289e3d226d156d31d3e801San Mehat
7258d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
7358d4c6c35633437182289e3d226d156d31d3e801San Mehat * Return values of various functions
7458d4c6c35633437182289e3d226d156d31d3e801San Mehat */
7558d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	FSOK		0		/* Check was OK */
7658d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	FSBOOTMOD	1		/* Boot block was modified */
7758d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	FSDIRMOD	2		/* Some directory was modified */
7858d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	FSFATMOD	4		/* The FAT was modified */
7958d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	FSERROR		8		/* Some unrecovered error remains */
8058d4c6c35633437182289e3d226d156d31d3e801San Mehat#define	FSFATAL		16		/* Some unrecoverable error occured */
8158d4c6c35633437182289e3d226d156d31d3e801San Mehat#define FSDIRTY		32		/* File system is dirty */
8258d4c6c35633437182289e3d226d156d31d3e801San Mehat#define FSFIXFAT	64		/* Fix file system FAT */
8358d4c6c35633437182289e3d226d156d31d3e801San Mehat
8458d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
8558d4c6c35633437182289e3d226d156d31d3e801San Mehat * read a boot block in a machine independend fashion and translate
8658d4c6c35633437182289e3d226d156d31d3e801San Mehat * it into our struct bootblock.
8758d4c6c35633437182289e3d226d156d31d3e801San Mehat */
8858d4c6c35633437182289e3d226d156d31d3e801San Mehatint readboot(int, struct bootblock *);
8958d4c6c35633437182289e3d226d156d31d3e801San Mehat
9058d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
9158d4c6c35633437182289e3d226d156d31d3e801San Mehat * Correct the FSInfo block.
9258d4c6c35633437182289e3d226d156d31d3e801San Mehat */
9358d4c6c35633437182289e3d226d156d31d3e801San Mehatint writefsinfo(int, struct bootblock *);
9458d4c6c35633437182289e3d226d156d31d3e801San Mehat
9558d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
9658d4c6c35633437182289e3d226d156d31d3e801San Mehat * Read one of the FAT copies and return a pointer to the new
9758d4c6c35633437182289e3d226d156d31d3e801San Mehat * allocated array holding our description of it.
9858d4c6c35633437182289e3d226d156d31d3e801San Mehat */
9958d4c6c35633437182289e3d226d156d31d3e801San Mehatint readfat(int, struct bootblock *, int, struct fatEntry **);
10058d4c6c35633437182289e3d226d156d31d3e801San Mehat
10158d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
10258d4c6c35633437182289e3d226d156d31d3e801San Mehat * Check two FAT copies for consistency and merge changes into the
10358d4c6c35633437182289e3d226d156d31d3e801San Mehat * first if neccessary.
10458d4c6c35633437182289e3d226d156d31d3e801San Mehat */
10558d4c6c35633437182289e3d226d156d31d3e801San Mehatint comparefat(struct bootblock *, struct fatEntry *, struct fatEntry *, int);
10658d4c6c35633437182289e3d226d156d31d3e801San Mehat
10758d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
10858d4c6c35633437182289e3d226d156d31d3e801San Mehat * Check a FAT
10958d4c6c35633437182289e3d226d156d31d3e801San Mehat */
11058d4c6c35633437182289e3d226d156d31d3e801San Mehatint checkfat(struct bootblock *, struct fatEntry *);
11158d4c6c35633437182289e3d226d156d31d3e801San Mehat
11258d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
11358d4c6c35633437182289e3d226d156d31d3e801San Mehat * Write back FAT entries
11458d4c6c35633437182289e3d226d156d31d3e801San Mehat */
11558d4c6c35633437182289e3d226d156d31d3e801San Mehatint writefat(int, struct bootblock *, struct fatEntry *, int);
11658d4c6c35633437182289e3d226d156d31d3e801San Mehat
11758d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
11858d4c6c35633437182289e3d226d156d31d3e801San Mehat * Read a directory
11958d4c6c35633437182289e3d226d156d31d3e801San Mehat */
12058d4c6c35633437182289e3d226d156d31d3e801San Mehatint resetDosDirSection(struct bootblock *, struct fatEntry *);
12158d4c6c35633437182289e3d226d156d31d3e801San Mehatvoid finishDosDirSection(void);
12258d4c6c35633437182289e3d226d156d31d3e801San Mehatint handleDirTree(int, struct bootblock *, struct fatEntry *);
12358d4c6c35633437182289e3d226d156d31d3e801San Mehat
12458d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
12558d4c6c35633437182289e3d226d156d31d3e801San Mehat * Cross-check routines run after everything is completely in memory
12658d4c6c35633437182289e3d226d156d31d3e801San Mehat */
12758d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
12858d4c6c35633437182289e3d226d156d31d3e801San Mehat * Check for lost cluster chains
12958d4c6c35633437182289e3d226d156d31d3e801San Mehat */
13058d4c6c35633437182289e3d226d156d31d3e801San Mehatint checklost(int, struct bootblock *, struct fatEntry *);
13158d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
13258d4c6c35633437182289e3d226d156d31d3e801San Mehat * Try to reconnect a lost cluster chain
13358d4c6c35633437182289e3d226d156d31d3e801San Mehat */
13458d4c6c35633437182289e3d226d156d31d3e801San Mehatint reconnect(int, struct bootblock *, struct fatEntry *, cl_t);
13558d4c6c35633437182289e3d226d156d31d3e801San Mehatvoid finishlf(void);
13658d4c6c35633437182289e3d226d156d31d3e801San Mehat
13758d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
13858d4c6c35633437182289e3d226d156d31d3e801San Mehat * Small helper functions
13958d4c6c35633437182289e3d226d156d31d3e801San Mehat */
14058d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
14158d4c6c35633437182289e3d226d156d31d3e801San Mehat * Return the type of a reserved cluster as text
14258d4c6c35633437182289e3d226d156d31d3e801San Mehat */
14358d4c6c35633437182289e3d226d156d31d3e801San Mehatchar *rsrvdcltype(cl_t);
14458d4c6c35633437182289e3d226d156d31d3e801San Mehat
14558d4c6c35633437182289e3d226d156d31d3e801San Mehat/*
14658d4c6c35633437182289e3d226d156d31d3e801San Mehat * Clear a cluster chain in a FAT
14758d4c6c35633437182289e3d226d156d31d3e801San Mehat */
14858d4c6c35633437182289e3d226d156d31d3e801San Mehatvoid clearchain(struct bootblock *, struct fatEntry *, cl_t);
14958d4c6c35633437182289e3d226d156d31d3e801San Mehat
15058d4c6c35633437182289e3d226d156d31d3e801San Mehat#endif
151