Skip to content

Commit 00638b0

Browse files
committed
Windows
1 parent bd1339d commit 00638b0

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/library/module.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Authors: Leonardo de Moura, Gabriel Ebner, Sebastian Ullrich
3232

3333
#ifdef LEAN_WINDOWS
3434
#include <windows.h>
35+
#include <io.h>
3536
#else
3637
#include <sys/mman.h>
3738
#include <unistd.h>
@@ -252,18 +253,16 @@ extern "C" LEAN_EXPORT object * lean_read_module_data_parts(b_obj_arg ofnames, o
252253
char * base_addr = file.m_base_addr;
253254
try {
254255
#ifdef LEAN_WINDOWS
255-
// `FILE_SHARE_DELETE` is necessary to allow the file to (be marked to) be deleted while in use
256-
HANDLE h_olean_fn = CreateFile(olean_fn.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
256+
HANDLE h_olean_fn = (HANDLE)_get_osfhandle(file.m_fd.get());
257257
if (h_olean_fn == INVALID_HANDLE_VALUE) {
258-
return io_result_mk_error((sstream() << "failed to open '" << olean_fn << "': " << GetLastError()).str());
258+
return io_result_mk_error((sstream() << "failed to get Windows handle for '" << olean_fn << "': " << GetLastError()).str());
259259
}
260260
HANDLE h_map = CreateFileMapping(h_olean_fn, NULL, PAGE_READONLY, 0, 0, NULL);
261-
if (h_olean_fn == NULL) {
261+
if (h_map == NULL) {
262262
return io_result_mk_error((sstream() << "failed to map '" << olean_fn << "': " << GetLastError()).str());
263263
}
264264
char * buffer = static_cast<char *>(MapViewOfFileEx(h_map, FILE_MAP_READ, 0, 0, 0, base_addr));
265265
lean_always_assert(CloseHandle(h_map));
266-
lean_always_assert(CloseHandle(h_olean_fn));
267266
if (!buffer) {
268267
is_mmap = false;
269268
break;

0 commit comments

Comments
 (0)