@@ -15,24 +15,32 @@ nbl::system::CFileWin32::CFileWin32(core::smart_refctd_ptr<ISystem>&& sys, const
15
15
GetSystemInfo (&info);
16
16
m_allocGranularity = info.dwAllocationGranularity ;
17
17
18
- DWORD access = m_flags.value | ECF_READ_WRITE ? FILE_GENERIC_READ | FILE_GENERIC_WRITE :
19
- (m_flags.value | ECF_READ ? FILE_GENERIC_READ : (m_flags.value | ECF_WRITE ? FILE_GENERIC_WRITE : 0 ));
20
- const bool canOpenWhenOpened = false ;
18
+ auto k = FILE_GENERIC_READ;
19
+ auto r = FILE_GENERIC_WRITE;
20
+ auto rw = FILE_GENERIC_READ |
21
+ FILE_GENERIC_WRITE;
22
+
23
+ DWORD access = (m_flags.value & ECF_READ_WRITE) == ECF_READ_WRITE ? FILE_GENERIC_READ | FILE_GENERIC_WRITE :
24
+ (m_flags.value & ECF_READ ? FILE_GENERIC_READ : (m_flags.value & ECF_WRITE ? FILE_GENERIC_WRITE : 0 ));
21
25
SECURITY_ATTRIBUTES secAttribs{ sizeof (SECURITY_ATTRIBUTES), nullptr , FALSE };
22
26
23
27
system::path p = getFileName ();
24
28
25
29
if (p.is_absolute ())
26
30
p.make_preferred (); // Replace "/" separators with "\"
27
31
28
- if (std::bit_cast<uint32_t >(m_flags & ECF_READ))
32
+ if (std::bit_cast<uint32_t >(m_flags & ECF_READ_WRITE) != ECF_READ_WRITE && std::bit_cast< uint32_t >(m_flags & ECF_READ))
29
33
{
30
- m_native = CreateFileA (p.string ().data (), access, canOpenWhenOpened, &secAttribs, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr );
31
- if (m_native == INVALID_HANDLE_VALUE) m_openedProperly = false ;
34
+ m_native = CreateFileA (p.string ().data (), access, FILE_SHARE_READ, &secAttribs, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr );
35
+ if (m_native == INVALID_HANDLE_VALUE)
36
+ {
37
+ auto e = GetLastError ();
38
+ m_openedProperly = false ;
39
+ }
32
40
}
33
41
else
34
42
{
35
- m_native = CreateFileA (p.string ().data (), access, canOpenWhenOpened , &secAttribs, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr );
43
+ m_native = CreateFileA (p.string ().data (), access, FILE_SHARE_READ , &secAttribs, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr );
36
44
}
37
45
38
46
if (m_native != INVALID_HANDLE_VALUE) [[likely]] // let this idle here until c++20 :)
@@ -45,7 +53,7 @@ nbl::system::CFileWin32::CFileWin32(core::smart_refctd_ptr<ISystem>&& sys, const
45
53
}
46
54
if (m_flags.value & ECF_MAPPABLE)
47
55
{
48
- DWORD access = (m_flags.value | ECF_READ_WRITE || m_flags.value | ECF_WRITE) ? PAGE_READWRITE :
56
+ DWORD access = (( m_flags.value & ECF_READ_WRITE) == ECF_READ_WRITE | m_flags.value & ECF_WRITE) ? PAGE_READWRITE :
49
57
(m_flags.value | ECF_READ ? PAGE_READONLY : 0 );
50
58
m_openedProperly &= access != 0 ;
51
59
/*
0 commit comments