Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/fs/msdosfs/fat.h
39586 views
1
/* $NetBSD: fat.h,v 1.12 1997/11/17 15:36:36 ws Exp $ */
2
3
/*-
4
* SPDX-License-Identifier: BSD-4-Clause
5
*
6
* Copyright (C) 1994, 1997 Wolfgang Solfrank.
7
* Copyright (C) 1994, 1997 TooLs GmbH.
8
* All rights reserved.
9
* Original code by Paul Popelka ([email protected]) (see below).
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* 2. Redistributions in binary form must reproduce the above copyright
17
* notice, this list of conditions and the following disclaimer in the
18
* documentation and/or other materials provided with the distribution.
19
* 3. All advertising materials mentioning features or use of this software
20
* must display the following acknowledgement:
21
* This product includes software developed by TooLs GmbH.
22
* 4. The name of TooLs GmbH may not be used to endorse or promote products
23
* derived from this software without specific prior written permission.
24
*
25
* THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
26
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28
* IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
31
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
33
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
34
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
*/
36
/*-
37
* Written by Paul Popelka ([email protected])
38
*
39
* You can do anything you want with this software, just don't say you wrote
40
* it, and don't remove this notice.
41
*
42
* This software is provided "as is".
43
*
44
* The author supplies this software to be publicly redistributed on the
45
* understanding that the author is not responsible for the correct
46
* functioning of this software in any circumstances and is not liable for
47
* any damages caused by this software.
48
*
49
* October 1992
50
*/
51
52
#ifndef _FS_MSDOSFS_FAT_H_
53
#define _FS_MSDOSFS_FAT_H_
54
/*
55
* Some useful cluster numbers.
56
*/
57
#define MSDOSFSROOT 0 /* cluster 0 means the root dir */
58
#define CLUST_FREE 0 /* cluster 0 also means a free cluster */
59
#define MSDOSFSFREE CLUST_FREE
60
#define CLUST_FIRST 2 /* first legal cluster number */
61
#define CLUST_RSRVD 0xfffffff6 /* reserved cluster range */
62
#define CLUST_BAD 0xfffffff7 /* a cluster with a defect */
63
#define CLUST_EOFS 0xfffffff8 /* start of eof cluster range */
64
#define CLUST_EOFE 0xffffffff /* end of eof cluster range */
65
66
#define FAT12_MASK 0x00000fff /* mask for 12 bit cluster numbers */
67
#define FAT16_MASK 0x0000ffff /* mask for 16 bit cluster numbers */
68
#define FAT32_MASK 0x0fffffff /* mask for FAT32 cluster numbers */
69
70
/*
71
* MSDOSFS:
72
* Return true if filesystem uses 12 bit FATs. Microsoft Programmer's
73
* Reference says if the maximum cluster number in a filesystem is greater
74
* than 4084 ((CLUST_RSRVD - CLUST_FIRST) & FAT12_MASK) then we've got a
75
* 16 bit FAT filesystem. While mounting, the result of this test is stored
76
* in pm_fatentrysize.
77
*/
78
#define FAT12(pmp) (pmp->pm_fatmask == FAT12_MASK)
79
#define FAT16(pmp) (pmp->pm_fatmask == FAT16_MASK)
80
#define FAT32(pmp) (pmp->pm_fatmask == FAT32_MASK)
81
82
#define MSDOSFSEOF(pmp, cn) ((((cn) | ~(pmp)->pm_fatmask) & CLUST_EOFS) == CLUST_EOFS)
83
84
#if defined (_KERNEL) || defined(_WANT_MSDOSFS_INTERNALS)
85
/*
86
* These are the values for the function argument to the function
87
* fatentry().
88
*/
89
#define FAT_GET 0x0001 /* get a FAT entry */
90
#define FAT_SET 0x0002 /* set a FAT entry */
91
#define FAT_GET_AND_SET (FAT_GET | FAT_SET)
92
93
/*
94
* Flags to extendfile:
95
*/
96
#define DE_CLEAR 1 /* Zero out the blocks allocated */
97
98
int pcbmap(struct denode *dep, u_long findcn, daddr_t *bnp, u_long *cnp, int* sp);
99
void clusterfree(struct msdosfsmount *pmp, u_long cn);
100
int clusteralloc(struct msdosfsmount *pmp, u_long start, u_long count, u_long fillwith, u_long *retcluster, u_long *got);
101
int fatentry(int function, struct msdosfsmount *pmp, u_long cluster, u_long *oldcontents, u_long newcontents);
102
int freeclusterchain(struct msdosfsmount *pmp, u_long startchain);
103
int extendfile(struct denode *dep, u_long count, struct buf **bpp, u_long *ncp, int flags);
104
void fc_purge(struct denode *dep, u_int frcn);
105
int markvoldirty_upgrade(struct msdosfsmount *pmp, bool dirty, bool rw_upgrade);
106
107
static inline int
108
markvoldirty(struct msdosfsmount *pmp, bool dirty)
109
{
110
return (markvoldirty_upgrade(pmp, dirty, false));
111
}
112
113
#endif /* _KERNEL || _WANT_MSDOSFS_INTERNALS */
114
#endif /* !_FS_MSDOSFS_FAT_H_ */
115
116