From 2d85c7bf7379245ce7556ee31598f725e51764b3 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 23 Dec 2016 17:12:23 -0800 Subject: [PATCH] tst: memfs: update parent timestamp on create/delete --- tst/memfs/memfs.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tst/memfs/memfs.cpp b/tst/memfs/memfs.cpp index 6ad118b6..fd62cc6c 100644 --- a/tst/memfs/memfs.cpp +++ b/tst/memfs/memfs.cpp @@ -384,6 +384,21 @@ MEMFS_FILE_NODE *MemfsFileNodeMapGetParent(MEMFS_FILE_NODE_MAP *FileNodeMap, PWS 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 NTSTATUS MemfsFileNodeMapInsert(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode, 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; if (*PInserted) + { MemfsFileNodeReference(FileNode); + MemfsFileNodeMapTouchParent(FileNodeMap, FileNode); + } return STATUS_SUCCESS; } catch (...) @@ -406,7 +424,10 @@ static inline VOID MemfsFileNodeMapRemove(MEMFS_FILE_NODE_MAP *FileNodeMap, MEMFS_FILE_NODE *FileNode) { if (FileNodeMap->erase(FileNode->FileName)) + { + MemfsFileNodeMapTouchParent(FileNodeMap, FileNode); MemfsFileNodeDereference(FileNode); + } } static inline