mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-07 20:42:09 -05:00
sys: create: overwrite EA support
This commit is contained in:
parent
02a650f8d0
commit
a830de9d04
@ -1171,8 +1171,16 @@ NTSTATUS FspFsvolCreateComplete(
|
|||||||
if (0 == FileNode->MainFileNode)
|
if (0 == FileNode->MainFileNode)
|
||||||
FspFileNodeOverwriteStreams(FileNode);
|
FspFileNodeOverwriteStreams(FileNode);
|
||||||
FspFileNodeSetFileInfo(FileNode, FileObject, &Response->Rsp.Overwrite.FileInfo, TRUE);
|
FspFileNodeSetFileInfo(FileNode, FileObject, &Response->Rsp.Overwrite.FileInfo, TRUE);
|
||||||
|
if (0 == FileNode->MainFileNode && FsvolDeviceExtension->VolumeParams.ExtendedAttributes)
|
||||||
|
{
|
||||||
|
/* invalidate any existing EA and increment the EA change count */
|
||||||
|
FspFileNodeSetEa(FileNode, 0, 0);
|
||||||
|
FileNode->EaChangeCount++;
|
||||||
|
}
|
||||||
FspFileNodeNotifyChange(FileNode,
|
FspFileNodeNotifyChange(FileNode,
|
||||||
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE,
|
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE |
|
||||||
|
(0 == FileNode->MainFileNode && FsvolDeviceExtension->VolumeParams.ExtendedAttributes ?
|
||||||
|
FILE_NOTIFY_CHANGE_EA : 0),
|
||||||
FILE_ACTION_MODIFIED,
|
FILE_ACTION_MODIFIED,
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
|
@ -460,6 +460,9 @@ namespace memfs
|
|||||||
FileNodeMap.Remove(StreamNode);
|
FileNodeMap.Remove(StreamNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SortedDictionary<String, EaValueData> EaMap = FileNode.GetEaMap(false);
|
||||||
|
if (null != EaMap)
|
||||||
|
EaMap.Clear();
|
||||||
if (IntPtr.Zero != Ea)
|
if (IntPtr.Zero != Ea)
|
||||||
{
|
{
|
||||||
Result = SetEa(FileNode, null, Ea, EaLength);
|
Result = SetEa(FileNode, null, Ea, EaLength);
|
||||||
|
@ -346,10 +346,10 @@ NTSTATUS MemfsFileNodeCreate(PWSTR FileName, MEMFS_FILE_NODE **PFileNode)
|
|||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
|
||||||
VOID MemfsFileNodeDelete(MEMFS_FILE_NODE *FileNode)
|
|
||||||
{
|
|
||||||
#if defined(MEMFS_EA)
|
#if defined(MEMFS_EA)
|
||||||
|
static inline
|
||||||
|
VOID MemfsFileNodeDeleteAllEa(MEMFS_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
if (0 != FileNode->EaMap)
|
if (0 != FileNode->EaMap)
|
||||||
{
|
{
|
||||||
for (MEMFS_FILE_NODE_EA_MAP::iterator p = FileNode->EaMap->begin(), q = FileNode->EaMap->end();
|
for (MEMFS_FILE_NODE_EA_MAP::iterator p = FileNode->EaMap->begin(), q = FileNode->EaMap->end();
|
||||||
@ -357,6 +357,14 @@ VOID MemfsFileNodeDelete(MEMFS_FILE_NODE *FileNode)
|
|||||||
free(p->second);
|
free(p->second);
|
||||||
delete FileNode->EaMap;
|
delete FileNode->EaMap;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline
|
||||||
|
VOID MemfsFileNodeDelete(MEMFS_FILE_NODE *FileNode)
|
||||||
|
{
|
||||||
|
#if defined(MEMFS_EA)
|
||||||
|
MemfsFileNodeDeleteAllEa(FileNode);
|
||||||
#endif
|
#endif
|
||||||
#if defined(MEMFS_REPARSE_POINTS)
|
#if defined(MEMFS_REPARSE_POINTS)
|
||||||
free(FileNode->ReparseData);
|
free(FileNode->ReparseData);
|
||||||
@ -1244,6 +1252,7 @@ static NTSTATUS Overwrite(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MEMFS_EA)
|
#if defined(MEMFS_EA)
|
||||||
|
MemfsFileNodeDeleteAllEa(FileNode);
|
||||||
if (0 != Ea)
|
if (0 != Ea)
|
||||||
{
|
{
|
||||||
Result = FspFileSystemEnumerateEa(FileSystem, MemfsFileNodeSetEa, FileNode, Ea, EaLength);
|
Result = FspFileSystemEnumerateEa(FileSystem, MemfsFileNodeSetEa, FileNode, Ea, EaLength);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user