From cd21d26b93bf1c2172d0cb139d1acc1789a29764 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 19 Oct 2020 18:17:05 -0700 Subject: [PATCH] dll: fuse: fsp_fuse_notify Correctly compute Windows change notification filter and action from FUSE change notification action. --- src/dll/fuse/fuse.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/dll/fuse/fuse.c b/src/dll/fuse/fuse.c index 83f7c468..dca5c8c2 100644 --- a/src/dll/fuse/fuse.c +++ b/src/dll/fuse/fuse.c @@ -655,7 +655,7 @@ FSP_FUSE_API int fsp_fuse_notify(struct fsp_fuse_env *env, else if (action & FSP_FUSE_NOTIFY_CREATE) { NotifyInfo.V.Filter = FILE_NOTIFY_CHANGE_FILE_NAME; - NotifyInfo.V.Action = FILE_ACTION_REMOVED; + NotifyInfo.V.Action = FILE_ACTION_ADDED; } else if (action & FSP_FUSE_NOTIFY_UNLINK) { @@ -665,26 +665,30 @@ FSP_FUSE_API int fsp_fuse_notify(struct fsp_fuse_env *env, if (action & (FSP_FUSE_NOTIFY_CHMOD | FSP_FUSE_NOTIFY_CHOWN)) { - NotifyInfo.V.Filter = FILE_NOTIFY_CHANGE_SECURITY; - NotifyInfo.V.Action = FILE_ACTION_MODIFIED; + NotifyInfo.V.Filter |= FILE_NOTIFY_CHANGE_SECURITY; + if (0 == NotifyInfo.V.Action) + NotifyInfo.V.Action = FILE_ACTION_MODIFIED; } if (action & FSP_FUSE_NOTIFY_UTIME) { - NotifyInfo.V.Filter = FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_LAST_WRITE; - NotifyInfo.V.Action = FILE_ACTION_MODIFIED; + NotifyInfo.V.Filter |= FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_LAST_WRITE; + if (0 == NotifyInfo.V.Action) + NotifyInfo.V.Action = FILE_ACTION_MODIFIED; } if (action & FSP_FUSE_NOTIFY_CHFLAGS) { - NotifyInfo.V.Filter = FILE_NOTIFY_CHANGE_ATTRIBUTES; - NotifyInfo.V.Action = FILE_ACTION_MODIFIED; + NotifyInfo.V.Filter |= FILE_NOTIFY_CHANGE_ATTRIBUTES; + if (0 == NotifyInfo.V.Action) + NotifyInfo.V.Action = FILE_ACTION_MODIFIED; } if (action & FSP_FUSE_NOTIFY_TRUNCATE) { - NotifyInfo.V.Filter = FILE_NOTIFY_CHANGE_SIZE; - NotifyInfo.V.Action = FILE_ACTION_MODIFIED; + NotifyInfo.V.Filter |= FILE_NOTIFY_CHANGE_SIZE; + if (0 == NotifyInfo.V.Action) + NotifyInfo.V.Action = FILE_ACTION_MODIFIED; } Result = FspFileSystemNotify(f->FileSystem, &NotifyInfo.V, NotifyInfo.V.Size);