mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 17:32:29 -05:00
winfsp-tests: memfs
This commit is contained in:
parent
29bb7f2195
commit
8d9a998c35
@ -10,6 +10,12 @@
|
|||||||
|
|
||||||
#define MEMFS_SECTOR_SIZE 512
|
#define MEMFS_SECTOR_SIZE 512
|
||||||
|
|
||||||
|
static inline
|
||||||
|
int MemfsFileNameCompare(PWSTR a, PWSTR b)
|
||||||
|
{
|
||||||
|
return wcscmp(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct _MEMFS_FILE_NODE
|
typedef struct _MEMFS_FILE_NODE
|
||||||
{
|
{
|
||||||
WCHAR FileName[MAX_PATH];
|
WCHAR FileName[MAX_PATH];
|
||||||
@ -26,7 +32,7 @@ struct MEMFS_FILE_NODE_LESS
|
|||||||
{
|
{
|
||||||
bool operator()(PWSTR a, PWSTR b) const
|
bool operator()(PWSTR a, PWSTR b) const
|
||||||
{
|
{
|
||||||
return 0 > wcscmp(a, b);
|
return 0 > MemfsFileNameCompare(a, b);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
typedef std::map<PWSTR, MEMFS_FILE_NODE *, MEMFS_FILE_NODE_LESS> MEMFS_FILE_NODE_MAP;
|
typedef std::map<PWSTR, MEMFS_FILE_NODE *, MEMFS_FILE_NODE_LESS> MEMFS_FILE_NODE_MAP;
|
||||||
@ -155,6 +161,20 @@ VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *F
|
|||||||
FileNodeMap->erase(FileNode->FileName);
|
FileNodeMap->erase(FileNode->FileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
BOOLEAN MemfsFileNodeMapHasChild(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
|
BOOLEAN Result;
|
||||||
|
PWSTR Remain, Suffix;
|
||||||
|
MEMFS_FILE_NODE_MAP::iterator iter = FileNodeMap->upper_bound(FileNode->FileName);
|
||||||
|
if (iter == FileNodeMap->end())
|
||||||
|
return FALSE;
|
||||||
|
FspPathSuffix(iter->second->FileName, &Remain, &Suffix);
|
||||||
|
Result = 0 == MemfsFileNameCompare(Remain, FileNode->FileName);
|
||||||
|
FspPathCombine(Remain, Suffix);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
||||||
PWSTR FileName, PDWORD PFileAttributes,
|
PWSTR FileName, PDWORD PFileAttributes,
|
||||||
PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize)
|
PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize)
|
||||||
@ -318,7 +338,7 @@ static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
|
||||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||||
|
|
||||||
if (Delete)
|
if (Delete && !MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
|
||||||
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
|
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user