From d02030897d702c7e96d5763f95845ca9bdfd6cdd Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 3 Dec 2017 19:56:36 -0800 Subject: [PATCH] dll: fuse: add O_EXCL during FUSE create op --- src/dll/fuse/fuse_intf.c | 4 ++-- tst/winfsp-tests/create-test.c | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/dll/fuse/fuse_intf.c b/src/dll/fuse/fuse_intf.c index bd3d2ec0..3fd783b4 100644 --- a/src/dll/fuse/fuse_intf.c +++ b/src/dll/fuse/fuse_intf.c @@ -765,9 +765,9 @@ static NTSTATUS fsp_fuse_intf_Create(FSP_FILE_SYSTEM *FileSystem, memset(&fi, 0, sizeof fi); if ('C' == f->env->environment) /* Cygwin */ - fi.flags = 0x0200 | 2 /*O_CREAT|O_RDWR*/; + fi.flags = 0x0200 | 0x0800 | 2 /*O_CREAT|O_EXCL|O_RDWR*/; else - fi.flags = 0x0100 | 2 /*O_CREAT|O_RDWR*/; + fi.flags = 0x0100 | 0x0400 | 2 /*O_CREAT|O_EXCL|O_RDWR*/; if (CreateOptions & FILE_DIRECTORY_FILE) { diff --git a/tst/winfsp-tests/create-test.c b/tst/winfsp-tests/create-test.c index f5d1dd19..9cbcc555 100644 --- a/tst/winfsp-tests/create-test.c +++ b/tst/winfsp-tests/create-test.c @@ -39,6 +39,11 @@ void create_dotest(ULONG Flags, PWSTR Prefix) ASSERT(INVALID_HANDLE_VALUE != Handle); CloseHandle(Handle); + Handle = CreateFileW(FilePath, + GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); + ASSERT(INVALID_HANDLE_VALUE == Handle); + ASSERT(ERROR_FILE_EXISTS == GetLastError()); + Handle = CreateFileW(FilePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); ASSERT(INVALID_HANDLE_VALUE != Handle);