ReactOS 0.4.15-dev-7994-gb388cb6
ff_dir.h
Go to the documentation of this file.
1/*****************************************************************************
2 * FullFAT - High Performance, Thread-Safe Embedded FAT File-System *
3 * Copyright (C) 2009 James Walmsley (james@worm.me.uk) *
4 * *
5 * This program is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 3 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
17 * *
18 * IMPORTANT NOTICE: *
19 * ================= *
20 * Alternative Licensing is available directly from the Copyright holder, *
21 * (James Walmsley). For more information consult LICENSING.TXT to obtain *
22 * a Commercial license. *
23 * *
24 * See RESTRICTIONS.TXT for extra restrictions on the use of FullFAT. *
25 * *
26 * Removing the above notice is illegal and will invalidate this license. *
27 *****************************************************************************
28 * See http://worm.me.uk/fullfat for more information. *
29 * Or http://fullfat.googlecode.com/ for latest releases and the wiki. *
30 *****************************************************************************/
31
37#ifndef _FF_DIR_H_
38#define _FF_DIR_H_
39
40#include "ff_types.h"
41#include "ff_config.h"
42#include "ff_error.h"
43#include "ff_ioman.h"
44#include "ff_blk.h"
45#include "ff_fat.h"
46#include "ff_fatdef.h"
47#include "ff_memory.h"
48#include "ff_time.h"
49#include "ff_hash.h"
50#include "ff_crc.h"
51#include "ff_file.h"
52#include <string.h>
53
54typedef struct {
62
63typedef struct {
66
67 // Book Keeping
72 // End Book Keeping
73
74#ifdef FF_TIME_SUPPORT
78#endif
79
80#ifdef FF_FINDAPI_ALLOW_WILDCARDS
81#ifdef FF_UNICODE_SUPPORT
83#else
84 FF_T_INT8 szWildCard[FF_MAX_FILENAME];
85#endif
86#endif
87
88#ifdef FF_UNICODE_SUPPORT
90#else
92#endif
93
94#if defined(FF_LFN_SUPPORT) && defined(FF_INCLUDE_SHORT_NAME)
96#endif
99} FF_DIRENT;
100
101
102
103// PUBLIC API
104#ifdef FF_UNICODE_SUPPORT
107#else
108FF_ERROR FF_FindFirst (FF_IOMAN *pIoman, FF_DIRENT *pDirent, const FF_T_INT8 *path);
109FF_ERROR FF_MkDir (FF_IOMAN *pIoman, const FF_T_INT8 *Path);
110#endif
111
113
114
115// INTERNAL API
116FF_ERROR FF_GetEntry (FF_IOMAN *pIoman, FF_T_UINT16 nEntry, FF_T_UINT32 DirCluster, FF_DIRENT *pDirent);
119
120void FF_PopulateShortDirent (FF_IOMAN *pIoman, FF_DIRENT *pDirent, FF_T_UINT8 *EntryBuffer);
122
127
128FF_T_SINT8 FF_PushEntry (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_UINT16 nEntry, FF_T_UINT8 *buffer, void *pParam);
130FF_ERROR FF_FindNextInDir (FF_IOMAN *pIoman, FF_DIRENT *pDirent, FF_FETCH_CONTEXT *pFetchContext);
131
132#ifdef FF_UNICODE_SUPPORT
133FF_T_UINT32 FF_FindEntryInDir (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, const FF_T_WCHAR *name, FF_T_UINT8 pa_Attrib, FF_DIRENT *pDirent, FF_ERROR *pError);
135#else
136FF_T_UINT32 FF_FindEntryInDir (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, const FF_T_INT8 *name, FF_T_UINT8 pa_Attrib, FF_DIRENT *pDirent, FF_ERROR *pError);
138#endif
139
140
141void FF_lockDIR (FF_IOMAN *pIoman);
142void FF_unlockDIR (FF_IOMAN *pIoman);
143
144#ifdef FF_UNICODE_SUPPORT
146#else
147FF_T_UINT32 FF_CreateFile(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_INT8 *FileName, FF_DIRENT *pDirent, FF_ERROR *pError);
148#endif
149
150FF_ERROR FF_CreateDirent (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_DIRENT *pDirent);
152
153#ifdef FF_UNICODE_SUPPORT
155#else
156FF_T_UINT32 FF_FindDir (FF_IOMAN *pIoman, const FF_T_INT8 *path, FF_T_UINT16 pathLen, FF_ERROR *pError);
157#endif
158
159#ifdef FF_HASH_CACHE
160FF_T_BOOL FF_CheckDirentHash (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_UINT32 nHash);
161FF_T_BOOL FF_DirHashed (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster);
162FF_ERROR FF_AddDirentHash (FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_UINT32 nHash);
163FF_ERROR FF_HashDir (FF_IOMAN *pIoman, FF_T_UINT32 ulDirCluster);
164#endif
165
167
168#endif
169
PRTL_UNICODE_STRING_BUFFER Path
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING ShortName
Definition: fatprocs.h:1306
#define FF_MAX_FILENAME
Definition: ff_config.h:159
FF_ERROR FF_PushEntryWithContext(FF_IOMAN *pIoman, FF_T_UINT32 ulEntry, FF_FETCH_CONTEXT *pContext, FF_T_UINT8 *pEntryBuffer)
FF_T_BOOL FF_isEndOfDir(FF_T_UINT8 *EntryBuffer)
FF_T_UINT32 FF_FindEntryInDir(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, const FF_T_WCHAR *name, FF_T_UINT8 pa_Attrib, FF_DIRENT *pDirent, FF_ERROR *pError)
FF_T_SINT8 FF_FindEntry(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_INT8 *Name, FF_DIRENT *pDirent, FF_T_BOOL LFNs)
FF_ERROR FF_FetchEntryWithContext(FF_IOMAN *pIoman, FF_T_UINT32 ulEntry, FF_FETCH_CONTEXT *pContext, FF_T_UINT8 *pEntryBuffer)
FF_T_SINT8 FF_CreateShortName(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_WCHAR *ShortName, FF_T_WCHAR *LongName)
void FF_CleanupEntryFetch(FF_IOMAN *pIoman, FF_FETCH_CONTEXT *pContext)
FF_ERROR FF_FindFirst(FF_IOMAN *pIoman, FF_DIRENT *pDirent, const FF_T_WCHAR *path)
FF_ERROR FF_PopulateLongDirent(FF_IOMAN *pIoman, FF_DIRENT *pDirent, FF_T_UINT16 nEntry, FF_FETCH_CONTEXT *pFetchContext)
FF_ERROR FF_RmLFNs(FF_IOMAN *pIoman, FF_T_UINT16 usDirEntry, FF_FETCH_CONTEXT *pContext)
FF_ERROR FF_FindNext(FF_IOMAN *pIoman, FF_DIRENT *pDirent)
FF_ERROR FF_InitEntryFetch(FF_IOMAN *pIoman, FF_T_UINT32 ulDirCluster, FF_FETCH_CONTEXT *pContext)
void FF_unlockDIR(FF_IOMAN *pIoman)
FF_ERROR FF_MkDir(FF_IOMAN *pIoman, const FF_T_WCHAR *Path)
FF_ERROR FF_CreateDirent(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_DIRENT *pDirent)
FF_ERROR FF_GetEntry(FF_IOMAN *pIoman, FF_T_UINT16 nEntry, FF_T_UINT32 DirCluster, FF_DIRENT *pDirent)
void FF_lockDIR(FF_IOMAN *pIoman)
FF_T_SINT8 FF_PushEntry(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_UINT16 nEntry, FF_T_UINT8 *buffer, void *pParam)
FF_ERROR FF_FindNextInDir(FF_IOMAN *pIoman, FF_DIRENT *pDirent, FF_FETCH_CONTEXT *pFetchContext)
FF_T_UINT32 FF_CreateFile(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster, FF_T_WCHAR *FileName, FF_DIRENT *pDirent, FF_ERROR *pError)
FF_T_UINT32 FF_FindDir(FF_IOMAN *pIoman, const FF_T_WCHAR *path, FF_T_UINT16 pathLen, FF_ERROR *pError)
FF_ERROR FF_ExtendDirectory(FF_IOMAN *pIoman, FF_T_UINT32 DirCluster)
void FF_PopulateShortDirent(FF_IOMAN *pIoman, FF_DIRENT *pDirent, FF_T_UINT8 *EntryBuffer)
FF_ERROR FF_PutEntry(FF_IOMAN *pIoman, FF_T_UINT16 Entry, FF_T_UINT32 DirCluster, FF_DIRENT *pDirent)
signed char FF_T_SINT8
8 bit signed integer.
Definition: ff_types.h:52
unsigned char FF_T_UINT8
8 bit unsigned integer.
Definition: ff_types.h:51
wchar_t FF_T_WCHAR
Unicode UTF-16 Charachter type, for FullFAT when UNICODE is enabled.
Definition: ff_types.h:80
unsigned short FF_T_UINT16
16 bit unsigned integer.
Definition: ff_types.h:56
char FF_T_BOOL
This can be a char if your compiler isn't C99.
Definition: ff_types.h:44
unsigned long FF_T_UINT32
32 bit unsigned integer.
Definition: ff_types.h:61
FF_T_SINT32 FF_ERROR
A special error code type to ease some inconsistencies in Error reporting.
Definition: ff_types.h:77
char FF_T_INT8
8 bit default integer.
Definition: ff_types.h:50
_In_ ULONGLONG _In_ PUNICODE_STRING _In_ PUNICODE_STRING LongName
Definition: fsrtlfuncs.h:338
GLuint buffer
Definition: glext.h:5915
base of all file and directory entries
Definition: entries.h:83
FullFAT handles memory with buffers, described as below.
Definition: ff_ioman.h:101
FF_T_UINT32 DirCluster
Definition: ff_dir.h:70
FF_T_UINT16 CurrentItem
Definition: ff_dir.h:71
FF_T_UINT32 Filesize
Definition: ff_dir.h:64
FF_T_UINT32 CurrentCluster
Definition: ff_dir.h:68
FF_SYSTEMTIME ModifiedTime
Date and Time Modified.
Definition: ff_dir.h:76
FF_T_UINT32 ObjectCluster
Definition: ff_dir.h:65
FF_SYSTEMTIME AccessedTime
Date of Last Access.
Definition: ff_dir.h:77
FF_SYSTEMTIME CreateTime
Date and Time Created.
Definition: ff_dir.h:75
FF_T_UINT8 Attrib
Definition: ff_dir.h:97
FF_T_UINT32 AddrCurrentCluster
Definition: ff_dir.h:69
FF_FETCH_CONTEXT FetchContext
Definition: ff_dir.h:98
FF_T_UINT32 ulChainLength
Definition: ff_dir.h:55
FF_T_UINT32 ulDirCluster
Definition: ff_dir.h:56
FF_T_UINT32 ulCurrentEntry
Definition: ff_dir.h:59
FF_BUFFER * pBuffer
Definition: ff_dir.h:60
FF_T_UINT32 ulCurrentClusterNum
Definition: ff_dir.h:58
FF_T_UINT32 ulCurrentClusterLCN
Definition: ff_dir.h:57
FF_IOMAN Object. A developer should not touch these values.
Definition: ff_ioman.h:190
A TIME and DATE object for FullFAT. A FullFAT time driver must populate these values.
Definition: ff_time.h:51
Definition: name.c:39