1 /* 2 * Copyright (C) 1995, 1996, 1997 Wolfgang Solfrank 3 * Copyright (c) 1995 Martin Husemann 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by Martin Husemann 16 * and Wolfgang Solfrank. 17 * 4. Neither the name of the University nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 * $NetBSD: ext.h,v 1.6 2000/04/25 23:02:51 jdolecek Exp $ 32 * $FreeBSD$ 33 */ 34 35 #ifndef EXT_H 36 #define EXT_H 37 38 #include <sys/types.h> 39 40 #include "dosfs.h" 41 42 #define LOSTDIR "LOST.DIR" 43 44 /* 45 * Options: 46 */ 47 extern int alwaysno; /* assume "no" for all questions */ 48 extern int alwaysyes; /* assume "yes" for all questions */ 49 extern int preen; /* we are preening */ 50 extern int rdonly; /* device is opened read only (supersedes above) */ 51 52 extern struct dosDirEntry *rootDir; 53 54 /* 55 * function declarations 56 */ 57 int ask(int, const char *, ...) __attribute__((__format__(__printf__,2,3))); 58 59 /* 60 * Check file system given as arg 61 */ 62 int checkfilesys(const char *); 63 64 /* 65 * Return values of various functions 66 */ 67 #define FSOK 0 /* Check was OK */ 68 #define FSBOOTMOD 1 /* Boot block was modified */ 69 #define FSDIRMOD 2 /* Some directory was modified */ 70 #define FSFATMOD 4 /* The FAT was modified */ 71 #define FSERROR 8 /* Some unrecovered error remains */ 72 #define FSFATAL 16 /* Some unrecoverable error occured */ 73 #define FSDIRTY 32 /* File system is dirty */ 74 #define FSFIXFAT 64 /* Fix file system FAT */ 75 76 /* 77 * read a boot block in a machine independend fashion and translate 78 * it into our struct bootblock. 79 */ 80 int readboot(int, struct bootblock *); 81 82 /* 83 * Correct the FSInfo block. 84 */ 85 int writefsinfo(int, struct bootblock *); 86 87 /* 88 * Read one of the FAT copies and return a pointer to the new 89 * allocated array holding our description of it. 90 */ 91 int readfat(int, struct bootblock *, int, struct fatEntry **); 92 93 /* 94 * Check two FAT copies for consistency and merge changes into the 95 * first if neccessary. 96 */ 97 int comparefat(struct bootblock *, struct fatEntry *, struct fatEntry *, int); 98 99 /* 100 * Check a FAT 101 */ 102 int checkfat(struct bootblock *, struct fatEntry *); 103 104 /* 105 * Write back FAT entries 106 */ 107 int writefat(int, struct bootblock *, struct fatEntry *, int); 108 109 /* 110 * Read a directory 111 */ 112 int resetDosDirSection(struct bootblock *, struct fatEntry *); 113 void finishDosDirSection(void); 114 int handleDirTree(int, struct bootblock *, struct fatEntry *); 115 116 /* 117 * Cross-check routines run after everything is completely in memory 118 */ 119 /* 120 * Check for lost cluster chains 121 */ 122 int checklost(int, struct bootblock *, struct fatEntry *); 123 /* 124 * Try to reconnect a lost cluster chain 125 */ 126 int reconnect(int, struct bootblock *, struct fatEntry *, cl_t); 127 void finishlf(void); 128 129 /* 130 * Small helper functions 131 */ 132 /* 133 * Return the type of a reserved cluster as text 134 */ 135 char *rsrvdcltype(cl_t); 136 137 /* 138 * Clear a cluster chain in a FAT 139 */ 140 void clearchain(struct bootblock *, struct fatEntry *, cl_t); 141 142 #endif 143