tst: memfs: update parent timestamp on create/delete

This commit is contained in:
Bill Zissimopoulos 2016-12-23 17:12:23 -08:00
parent ff3436718c
commit 2d85c7bf73

View File

@ -384,6 +384,21 @@ MEMFS_FILE_NODE *MemfsFileNodeMapGetParent(MEMFS_FILE_NODE_MAP *FileNodeMap, PWS
return iter->second; return iter->second;
} }
static inline
VOID MemfsFileNodeMapTouchParent(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode)
{
NTSTATUS Result;
MEMFS_FILE_NODE *Parent;
if (L'\\' == FileNode->FileName[0] && L'\0' == FileNode->FileName[1])
return;
Parent = MemfsFileNodeMapGetParent(FileNodeMap, FileNode->FileName, &Result);
if (0 == Parent)
return;
Parent->FileInfo.LastAccessTime =
Parent->FileInfo.LastWriteTime =
Parent->FileInfo.ChangeTime = MemfsGetSystemTime();
}
static inline static inline
NTSTATUS MemfsFileNodeMapInsert(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode, NTSTATUS MemfsFileNodeMapInsert(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode,
PBOOLEAN PInserted) PBOOLEAN PInserted)
@ -393,7 +408,10 @@ NTSTATUS MemfsFileNodeMapInsert(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NOD
{ {
*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) if (*PInserted)
{
MemfsFileNodeReference(FileNode); MemfsFileNodeReference(FileNode);
MemfsFileNodeMapTouchParent(FileNodeMap, FileNode);
}
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
catch (...) catch (...)
@ -406,8 +424,11 @@ static inline
VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode) VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode)
{ {
if (FileNodeMap->erase(FileNode->FileName)) if (FileNodeMap->erase(FileNode->FileName))
{
MemfsFileNodeMapTouchParent(FileNodeMap, FileNode);
MemfsFileNodeDereference(FileNode); MemfsFileNodeDereference(FileNode);
} }
}
static inline static inline
BOOLEAN MemfsFileNodeMapHasChild(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode) BOOLEAN MemfsFileNodeMapHasChild(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode)