mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-11-04 04:58:05 -06:00 
			
		
		
		
	winfsp-tests: memfs
This commit is contained in:
		@@ -10,6 +10,12 @@
 | 
			
		||||
 | 
			
		||||
#define MEMFS_SECTOR_SIZE               512
 | 
			
		||||
 | 
			
		||||
static inline
 | 
			
		||||
int MemfsFileNameCompare(PWSTR a, PWSTR b)
 | 
			
		||||
{
 | 
			
		||||
    return wcscmp(a, b);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct _MEMFS_FILE_NODE
 | 
			
		||||
{
 | 
			
		||||
    WCHAR FileName[MAX_PATH];
 | 
			
		||||
@@ -26,7 +32,7 @@ struct MEMFS_FILE_NODE_LESS
 | 
			
		||||
{
 | 
			
		||||
    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;
 | 
			
		||||
@@ -155,6 +161,20 @@ VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *F
 | 
			
		||||
    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,
 | 
			
		||||
    PWSTR FileName, PDWORD PFileAttributes,
 | 
			
		||||
    PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize)
 | 
			
		||||
@@ -318,7 +338,7 @@ static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
 | 
			
		||||
    MEMFS *Memfs = (MEMFS *)FileSystem->UserContext;
 | 
			
		||||
    MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
 | 
			
		||||
 | 
			
		||||
    if (Delete)
 | 
			
		||||
    if (Delete && !MemfsFileNodeMapHasChild(Memfs->FileNodeMap, FileNode))
 | 
			
		||||
        MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user