Skip to content

Commit 13c47b8

Browse files
Fixed shared archive access
1 parent b012834 commit 13c47b8

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

examples_tests/52.SystemTest/main.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,6 @@ int main(int argc, char** argv)
306306
}
307307
};
308308

309-
auto arch = system->openFileArchive(CWD.generic_string() + "test.zip");
310-
system->mount(std::move(arch), "arch");
311309
auto bigarch = system->openFileArchive(CWD.generic_string() + "../../media/sponza.zip");
312310
system->mount(std::move(bigarch), "sponza");
313311

src/nbl/system/CFileWin32.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,32 @@ nbl::system::CFileWin32::CFileWin32(core::smart_refctd_ptr<ISystem>&& sys, const
1515
GetSystemInfo(&info);
1616
m_allocGranularity = info.dwAllocationGranularity;
1717

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));
2125
SECURITY_ATTRIBUTES secAttribs{ sizeof(SECURITY_ATTRIBUTES), nullptr, FALSE };
2226

2327
system::path p = getFileName();
2428

2529
if (p.is_absolute())
2630
p.make_preferred(); // Replace "/" separators with "\"
2731

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))
2933
{
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+
}
3240
}
3341
else
3442
{
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);
3644
}
3745

3846
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
4553
}
4654
if (m_flags.value & ECF_MAPPABLE)
4755
{
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 :
4957
(m_flags.value | ECF_READ ? PAGE_READONLY : 0);
5058
m_openedProperly &= access != 0;
5159
/*

0 commit comments

Comments
 (0)