From 460726df8352851aa65465bda53e74d9f5380514 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Tue, 3 Jan 2017 12:07:52 -0800 Subject: [PATCH] tst: memfs: Cleanup now properly update metadata on MainFileNode --- tools/run-tests.bat | 5 +++-- tst/memfs/memfs.cpp | 16 +++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/tools/run-tests.bat b/tools/run-tests.bat index 5b967c1e..05dff92e 100755 --- a/tools/run-tests.bat +++ b/tools/run-tests.bat @@ -409,8 +409,9 @@ call :__ifstest %1 /g ReparsePoints -t SetPointEASNotSupportedTest -t EnumRepars if !ERRORLEVEL! neq 0 set IfsTestMemfsExit=1 rem IfsTest ReparsePoints seems to have a bug in that it cannot handle STATUS_PENDING for FSCTL_GET_REPARSE_POINT rmdir /s/q reparspt -rem call :__ifstest %1 /g StreamEnhancements -rem if !ERRORLEVEL! neq 0 set IfsTestMemfsExit=1 +rem StreamEnhancements.StreamRenameTest: WinFsp does not support stream renaming +call :__ifstest %1 /g StreamEnhancements -t StreamRenameTest +if !ERRORLEVEL! neq 0 set IfsTestMemfsExit=1 for %%d in (!IfsTestDirectories!) do ( if exist %%d (echo :ifstest directory %%d still exists & set IfsTestMemfsExit=1) ) diff --git a/tst/memfs/memfs.cpp b/tst/memfs/memfs.cpp index 05c9ccf2..5da6a2fd 100644 --- a/tst/memfs/memfs.cpp +++ b/tst/memfs/memfs.cpp @@ -967,13 +967,19 @@ static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem, { MEMFS *Memfs = (MEMFS *)FileSystem->UserContext; MEMFS_FILE_NODE *FileNode = (MEMFS_FILE_NODE *)FileNode0; +#if defined(MEMFS_NAMED_STREAMS) + MEMFS_FILE_NODE *MainFileNode = 0 != FileNode->MainFileNode ? + FileNode->MainFileNode : FileNode; +#else + MEMFS_FILE_NODE *MainFileNode = FileNode; +#endif assert(0 != Flags); /* FSP_FSCTL_VOLUME_PARAMS::PostCleanupWhenModifiedOnly ensures this */ if (Flags & FspCleanupSetArchiveBit) { - if (0 == (FileNode->FileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - FileNode->FileInfo.FileAttributes |= FILE_ATTRIBUTE_ARCHIVE; + if (0 == (MainFileNode->FileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + MainFileNode->FileInfo.FileAttributes |= FILE_ATTRIBUTE_ARCHIVE; } if (Flags & (FspCleanupSetLastAccessTime | FspCleanupSetLastWriteTime | FspCleanupSetChangeTime)) @@ -981,11 +987,11 @@ static VOID Cleanup(FSP_FILE_SYSTEM *FileSystem, UINT64 SystemTime = MemfsGetSystemTime(); if (Flags & FspCleanupSetLastAccessTime) - FileNode->FileInfo.LastAccessTime = SystemTime; + MainFileNode->FileInfo.LastAccessTime = SystemTime; if (Flags & FspCleanupSetLastWriteTime) - FileNode->FileInfo.LastWriteTime = SystemTime; + MainFileNode->FileInfo.LastWriteTime = SystemTime; if (Flags & FspCleanupSetChangeTime) - FileNode->FileInfo.ChangeTime = SystemTime; + MainFileNode->FileInfo.ChangeTime = SystemTime; } if (Flags & FspCleanupSetAllocationSize)