mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 01:13:04 -05:00
winfsp-tests: memfs: fixes
This commit is contained in:
parent
0bedee7d5f
commit
a7fb304a24
@ -19,7 +19,7 @@ typedef struct _MEMFS_FILE_NODE
|
|||||||
ULONG AllocationSize;
|
ULONG AllocationSize;
|
||||||
ULONG FileSize;
|
ULONG FileSize;
|
||||||
PVOID FileData;
|
PVOID FileData;
|
||||||
ULONG OpenCount;
|
ULONG RefCount;
|
||||||
} MEMFS_FILE_NODE;
|
} MEMFS_FILE_NODE;
|
||||||
|
|
||||||
struct MEMFS_FILE_NODE_LESS
|
struct MEMFS_FILE_NODE_LESS
|
||||||
@ -129,6 +129,8 @@ NTSTATUS MemfsFileNodeMapInsert(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NOD
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
*PInserted = FileNodeMap->insert(MEMFS_FILE_NODE_MAP::value_type(FileNode->FileName, FileNode)).second;
|
*PInserted = FileNodeMap->insert(MEMFS_FILE_NODE_MAP::value_type(FileNode->FileName, FileNode)).second;
|
||||||
|
if (*PInserted)
|
||||||
|
FileNode->RefCount++;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
@ -138,9 +140,10 @@ NTSTATUS MemfsFileNodeMapInsert(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NOD
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, PWSTR FileName)
|
VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode)
|
||||||
{
|
{
|
||||||
FileNodeMap->erase(FileName);
|
--FileNode->RefCount;
|
||||||
|
FileNodeMap->erase(FileNode->FileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS GetSecurity(FSP_FILE_SYSTEM *FileSystem,
|
||||||
@ -236,7 +239,7 @@ static NTSTATUS Create(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileNode->OpenCount++;
|
FileNode->RefCount++;
|
||||||
NodeInfo->FileAttributes = FileNode->FileAttributes;
|
NodeInfo->FileAttributes = FileNode->FileAttributes;
|
||||||
NodeInfo->AllocationSize = FileNode->AllocationSize;
|
NodeInfo->AllocationSize = FileNode->AllocationSize;
|
||||||
NodeInfo->FileSize = FileNode->FileSize;
|
NodeInfo->FileSize = FileNode->FileSize;
|
||||||
@ -258,7 +261,7 @@ static NTSTATUS Open(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
return !MemfsFileNodeMapGetParent(Memfs->FileNodeMap, FileName) ?
|
return !MemfsFileNodeMapGetParent(Memfs->FileNodeMap, FileName) ?
|
||||||
STATUS_OBJECT_PATH_NOT_FOUND : STATUS_OBJECT_NAME_NOT_FOUND;
|
STATUS_OBJECT_PATH_NOT_FOUND : STATUS_OBJECT_NAME_NOT_FOUND;
|
||||||
|
|
||||||
FileNode->OpenCount++;
|
FileNode->RefCount++;
|
||||||
NodeInfo->FileAttributes = FileNode->FileAttributes;
|
NodeInfo->FileAttributes = FileNode->FileAttributes;
|
||||||
NodeInfo->AllocationSize = FileNode->AllocationSize;
|
NodeInfo->AllocationSize = FileNode->AllocationSize;
|
||||||
NodeInfo->FileSize = FileNode->FileSize;
|
NodeInfo->FileSize = FileNode->FileSize;
|
||||||
@ -296,7 +299,7 @@ static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0;
|
||||||
|
|
||||||
if (Delete)
|
if (Delete)
|
||||||
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode->FileName);
|
MemfsFileNodeMapRemove(Memfs->FileNodeMap, FileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID Close(FSP_FILE_SYSTEM *FileSystem,
|
static VOID Close(FSP_FILE_SYSTEM *FileSystem,
|
||||||
@ -306,7 +309,7 @@ static VOID Close(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 (0 == --FileNode->OpenCount)
|
if (0 == --FileNode->RefCount)
|
||||||
MemfsFileNodeDelete(FileNode);
|
MemfsFileNodeDelete(FileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user