Skip to content

Commit c36630c

Browse files
committed
Add support for NanoBind/PyBind
Fix retrieving Python arrays. Fix Python Lists appending. Remove Python REQUIREMENT in order to build. It's not required to link a specific version at all. Fixed crash on MacOS Sequioa which now distinguishes between USR and OTH permissions on memory-maps (Different from Linux!).
1 parent 737b1d3 commit c36630c

File tree

113 files changed

+27998
-281
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+27998
-281
lines changed

.github/workflows/build.yml

+4-3
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,23 @@ jobs:
2222
name: Linux-aarch64
2323
other_linker_flags: '-L/usr/aarch64-linux-gnu/local/lib'
2424
arch: aarch64
25-
output: libRemoteInput.so.1.0.0
25+
output: libRemoteInput.so
2626
release: libRemoteInput-aarch64.so
2727

2828
#Linux-64
2929
- os: ubuntu-latest
3030
name: Linux-64
3131
other_linker_flags: '-m64'
3232
arch: x86_64
33-
output: libRemoteInput.so.1.0.0
33+
output: libRemoteInput.so
3434
release: libRemoteInput-x86_64.so
3535

3636
#MacOS-64
3737
- os: macos-13 #macos-latest
3838
name: MacOS-64
3939
other_linker_flags: '-m64'
4040
arch: x86_64
41-
output: libRemoteInput.1.0.0.dylib
41+
output: libRemoteInput.dylib
4242
release: libRemoteInput-x86_64.dylib
4343

4444
#Windows-32
@@ -63,6 +63,7 @@ jobs:
6363
submodules: true
6464

6565
- name: Set up Python
66+
if: matrix.config.name != 'Linux-aarch64'
6667
uses: actions/setup-python@v4
6768
with:
6869
python-version: '3.x'

CMakeLists.txt

+144-82
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,23 @@ IF(NOT CMAKE_BUILD_TYPE)
99
ENDIF()
1010

1111
set(PYTHON_BINDINGS ON)
12+
set(USE_PYBIND11 OFF)
13+
set(USE_PYTHON3 OFF)
14+
set(USE_SYSTEM_PYBIND11 OFF)
15+
set(PYTHON_LIMITED_VERSION 0x03080000)
16+
17+
IF (USE_PYBIND11)
18+
unset(Py_LIMITED_API)
19+
MESSAGE(STATUS, "PyBind11 being used -- Ignoring Py_LIMITED_API")
20+
ENDIF()
21+
22+
IF (NOT USE_PYBIND11)
23+
set(Py_LIMITED_API ${PYTHON_LIMITED_VERSION})
24+
ENDIF()
1225

26+
IF(PYTHON_BINDINGS AND USE_PYBIND11 AND Py_LIMITED_API)
27+
MESSAGE(FATAL_ERROR, "PyBind11 cannot be used with Py_LIMITED_API")
28+
ENDIF()
1329

1430
# ----------------------------- PACKAGES -----------------------------
1531
set(JAVA_AWT_LIBRARY NotNeeded)
@@ -20,14 +36,48 @@ find_package(Java 1.8 REQUIRED)
2036
find_package(JNI 1.8 REQUIRED)
2137

2238
IF(PYTHON_BINDINGS)
23-
find_package(Python 3.8 REQUIRED COMPONENTS Interpreter Development)
24-
MESSAGE(STATUS, "${Python_LIBRARIES}")
25-
MESSAGE(STATUS, "${Python_LIBRARY_DIRS}")
26-
MESSAGE(STATUS, "${PYTHON_DYNAMIC_LINKER_FLAGS}")
27-
ENDIF()
28-
29-
set(Py_LIMITED_API 0x03080000)
39+
IF(USE_PYBIND11)
40+
IF(USE_PYTHON3)
41+
find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
42+
set(PY_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
43+
set(PY_LIBRARIES ${Python3_LIBRARIES})
44+
set(PY_LIBRARIES ${Python3_LIBRARY_DIRS})
45+
set(PY_LINK_OPTIONS ${Python3_LINK_OPTIONS})
46+
set(PY_DYNAMIC_LINKER_FLAGS ${Python3_DYNAMIC_LINKER_FLAGS})
47+
ELSE()
48+
find_package(Python REQUIRED COMPONENTS Interpreter Development)
49+
set(PY_INCLUDE_DIRS ${Python_INCLUDE_DIRS})
50+
set(PY_LIBRARIES ${Python_LIBRARIES})
51+
set(PY_LIBRARY_DIRS ${Python_LIBRARY_DIRS})
52+
set(PY_LINK_OPTIONS ${Python_LINK_OPTIONS})
53+
set(PY_DYNAMIC_LINKER_FLAGS ${Python_DYNAMIC_LINKER_FLAGS})
54+
ENDIF()
3055

56+
IF(USE_SYSTEM_PYBIND11)
57+
find_package(nanobind REQUIRED)
58+
ENDIF()
59+
ELSE()
60+
IF(USE_PYTHON3)
61+
find_package(Python3 3.8 REQUIRED COMPONENTS Interpreter Development)
62+
set(PY_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
63+
# set(PY_LIBRARIES ${Python3_LIBRARIES})
64+
set(PY_LIBRARY_DIRS ${Python3_LIBRARY_DIRS})
65+
set(PY_LINK_OPTIONS ${Python3_LINK_OPTIONS})
66+
set(PY_DYNAMIC_LINKER_FLAGS ${Python3_DYNAMIC_LINKER_FLAGS})
67+
ELSE()
68+
find_package(Python 3.8 REQUIRED COMPONENTS Interpreter Development)
69+
set(PY_INCLUDE_DIRS ${Python_INCLUDE_DIRS})
70+
# set(PY_LIBRARIES ${Python_LIBRARIES})
71+
set(PY_LIBRARY_DIRS ${Python_LIBRARY_DIRS})
72+
set(PY_LINK_OPTIONS ${Python_LINK_OPTIONS})
73+
set(PY_DYNAMIC_LINKER_FLAGS ${Python_DYNAMIC_LINKER_FLAGS})
74+
ENDIF()
75+
ENDIF()
76+
MESSAGE(STATUS, "${PY_INCLUDE_DIRS}")
77+
MESSAGE(STATUS, "${PY_LIBRARIES}")
78+
MESSAGE(STATUS, "${PY_LIBRARY_DIRS}")
79+
MESSAGE(STATUS, "${PY_DYNAMIC_LINKER_FLAGS}")
80+
ENDIF()
3181

3282
# ----------------------- INCLUDE_DIRECTORIES -----------------------
3383
set(INCLUDE_DIRECTORIES
@@ -39,7 +89,7 @@ set(INCLUDE_DIRECTORIES
3989
RemoteInput/Plugin
4090
RemoteInput/Plugin/JVM
4191
${JNI_INCLUDE_DIRS}
42-
${Python_INCLUDE_DIRS})
92+
${PY_INCLUDE_DIRS})
4393

4494

4595
# ----------------------------- PLATFORM -----------------------------
@@ -90,52 +140,9 @@ ELSE()
90140
ENDIF()
91141

92142

93-
94-
# ------------------------- JAVA LINKER -------------------------
95-
IF(WIN32)
96-
# set(LIBRARIES_LIST
97-
# ${JAVA_AWT_LIBRARY})
98-
ELSEIF(APPLE)
99-
# set(JAVA_JNI_LIBRARY_PATH
100-
# /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib)
101-
#
102-
# set(JAVA_JNI_LIBRARY_RPATH
103-
# "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib")
104-
105-
# find_library(Java_JAWT_LIBRARY
106-
# NAMES libawt.dylib
107-
# HIMES ${_JAVA_HINTS}
108-
# PATHS ${JAVA_JNI_LIBRARY_PATH})
109-
#
110-
# find_library(Java_JAWT_EXTENDED_LIBRARY
111-
# NAMES libawt_lwawt.dylib
112-
# HIMES ${_JAVA_HINTS}
113-
# PATHS ${JAVA_JNI_LIBRARY_PATH})
114-
#
115-
# set(LIBRARIES_LIST
116-
# ${Java_JAWT_LIBRARY}
117-
# ${Java_JAWT_EXTENDED_LIBRARY}
118-
# "-rpath \"${JAVA_JNI_LIBRARY_RPATH}\""
119-
# "-rpath \"${JAVA_JNI_LIBRARY_RPATH}/server\"")
120-
ELSE()
121-
# set(Java_JAWT_LIBRARY
122-
# ${JAVA_AWT_LIBRARY})
123-
#
124-
# find_library(Java_JAWT_EXTENDED_LIBRARY
125-
# NAMES libawt_xawt.so
126-
# HIMES ${_JAVA_HINTS}
127-
# PATHS ${JAVA_AWT_LIBRARY}/..)
128-
#
129-
# set(LIBRARIES_LIST
130-
# ${Java_JAWT_LIBRARY}
131-
# ${Java_JAWT_EXTENDED_LIBRARY})
132-
ENDIF()
133-
134-
135-
136143
# ----------------------------- SOURCES -----------------------------
144+
137145
set(SRC_LIST
138-
${SRC_LIST}
139146
${EXTRA_INCLUDES}
140147
RemoteInput/RemoteInput.h
141148
RemoteInput/Echo/Atomics.cxx
@@ -159,8 +166,6 @@ set(SRC_LIST
159166
RemoteInput/Echo/TypeTraits.hxx
160167
RemoteInput/Echo/TypeTraits_Functional.hxx
161168
RemoteInput/Echo/TypeTraits_Functional_Attributes.hxx
162-
#RemoteInput/Hooks/ModelRendering.cpp
163-
#RemoteInput/Hooks/ModelRendering.hpp
164169
RemoteInput/Java/JNI_Common.hxx
165170
RemoteInput/Java/Applet.cxx
166171
RemoteInput/Java/Applet.hxx
@@ -208,7 +213,6 @@ set(SRC_LIST
208213
RemoteInput/Platform/NativeHooks_Linux.cxx
209214
RemoteInput/Platform/NativeHooks_Windows.cxx
210215
RemoteInput/Platform/Platform.hxx
211-
#RemoteInput/Platform/Platform_Darwin.mm
212216
RemoteInput/Platform/Platform_Linux.cxx
213217
RemoteInput/Platform/Platform_Windows.cxx
214218
RemoteInput/Plugin/ControlCenter.cxx
@@ -252,17 +256,14 @@ set(SRC_LIST
252256
RemoteInput/Injection/Injector_Linux.cpp
253257
RemoteInput/Injection/Injector_Arm.cpp)
254258

255-
IF(WIN32)
256-
257-
ELSEIF(APPLE)
258-
set(SRC_LIST
259-
${SRC_LIST}
259+
IF(APPLE)
260+
list(APPEND SRC_LIST
260261
RemoteInput/Platform/Platform_Darwin.mm)
261262
ENDIF()
262263

263264
IF(PYTHON_BINDINGS)
264-
set(SRC_LIST
265-
${SRC_LIST}
265+
list(APPEND SRC_LIST
266+
RemoteInput/Plugin/Python/PythonMacros.hxx
266267
RemoteInput/Plugin/Python/PythonCommon.cxx
267268
RemoteInput/Plugin/Python/PythonCommon.hxx
268269
RemoteInput/Plugin/Python/PythonPlugin.cxx
@@ -281,22 +282,43 @@ IF(PYTHON_BINDINGS)
281282
ENDIF()
282283

283284
IF(PYTHON_BINDINGS AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"))
284-
# set(EXTRA_LIBRARIES
285-
# ${EXTRA_LIBRARIES}
286-
# ${Python_LIBRARIES})
287-
# set(PYTHON_DYNAMIC_LINKER_FLAGS
288-
# -undefined dynamic_lookup)
285+
# set(EXTRA_LIBRARIES
286+
# ${EXTRA_LIBRARIES}
287+
# ${Python_LIBRARIES})
288+
# set(PYTHON_DYNAMIC_LINKER_FLAGS
289+
# -undefined dynamic_lookup)
289290
ENDIF()
290291

291292
# ---------------------------- COMPILE ----------------------------
292293

293-
add_subdirectory(RemoteInput/Thirdparty)
294-
add_library(${PROJECT_NAME} SHARED ${SRC_LIST} $<TARGET_OBJECTS:THIRD_PARTY_LIBRARIES>)
295-
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
294+
IF(PYTHON_BINDINGS AND USE_PYBIND11)
295+
add_subdirectory(RemoteInput/Thirdparty)
296+
297+
IF(NOT USE_SYSTEM_PYBIND11)
298+
add_subdirectory(RemoteInput/Thirdparty/nanobind)
299+
ENDIF()
300+
301+
nanobind_add_module(${PROJECT_NAME} SHARED ${SRC_LIST} $<TARGET_OBJECTS:THIRD_PARTY_LIBRARIES>)
302+
303+
IF(NOT USE_SYSTEM_PYBIND11)
304+
target_include_directories(RemoteInput PRIVATE ${CMAKE_SOURCE_DIR}/RemoteInput/Thirdparty/nanobind/include)
305+
ENDIF()
306+
ELSE()
307+
add_subdirectory(RemoteInput/Thirdparty)
308+
add_library(${PROJECT_NAME} SHARED ${SRC_LIST} $<TARGET_OBJECTS:THIRD_PARTY_LIBRARIES>)
309+
ENDIF()
310+
311+
#set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
296312
target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDE_DIRECTORIES})
297313

298-
IF(Py_LIMITED_API)
299-
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 Py_LIMITED_API=${Py_LIMITED_API} Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
314+
IF(PYTHON_BINDINGS)
315+
IF (USE_PYBIND11)
316+
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 USE_PYBIND11=1 Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
317+
ELSEIF(Py_LIMITED_API)
318+
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 Py_LIMITED_API=${Py_LIMITED_API} Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
319+
ELSE()
320+
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1 Py_BUILD_CORE=1 Py_NO_ENABLE_SHARED=1)
321+
ENDIF()
300322
ELSE()
301323
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DETOURS=1 HOOK_OPENGL_BLIT=1)
302324
ENDIF()
@@ -307,15 +329,15 @@ IF(WIN32)
307329
$<$<CONFIG:DEBUG>:-DDEBUG>
308330
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden>)
309331
target_link_options(${PROJECT_NAME} PRIVATE
310-
$<$<CONFIG:DEBUG>:-static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>
311-
$<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>)
332+
$<$<CONFIG:DEBUG>:-static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>
333+
$<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -fuse-ld=lld -Wl,--enable-stdcall-fixup -Wl,--kill-at -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>)
312334
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
313335
target_compile_options(${PROJECT_NAME} PRIVATE
314336
$<$<CONFIG:DEBUG>:-DDEBUG -Wl,--input-def=RemoteInput/RemoteInput.def>
315337
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden -Wl,--input-def=RemoteInput/RemoteInput.def>)
316338
target_link_options(${PROJECT_NAME} PRIVATE
317-
$<$<CONFIG:DEBUG>:-static -static-libgcc -static-libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>
318-
$<$<CONFIG:RELEASE>:-s -static -static-libgcc -static-libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>)
339+
$<$<CONFIG:DEBUG>:-static -static-libgcc -static-libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>
340+
$<$<CONFIG:RELEASE>:-s -static -static-libgcc -static-libstdc++ -Wl,--enable-stdcall-fixup -Wl,--kill-at ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>)
319341
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
320342
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
321343
set_property(TARGET ${PROJECT_NAME} PROPERTY
@@ -330,7 +352,7 @@ IF(WIN32)
330352
IF(PYTHON_BINDINGS)
331353
target_link_options(${PROJECT_NAME} PRIVATE
332354
$<$<CONFIG:DEBUG>:>
333-
$<$<CONFIG:RELEASE>:/LIBPATH:${Python_LIBRARY_DIRS} ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>)
355+
$<$<CONFIG:RELEASE>:/LIBPATH:${Python_LIBRARY_DIRS} ${Py_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>)
334356
ELSE()
335357
target_link_options(${PROJECT_NAME} PRIVATE
336358
$<$<CONFIG:DEBUG>:>
@@ -342,15 +364,55 @@ ELSEIF(APPLE)
342364
$<$<CONFIG:DEBUG>:-DDEBUG -g -fvisibility=hidden>
343365
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden>)
344366
target_link_options(${PROJECT_NAME} PRIVATE
345-
$<$<CONFIG:DEBUG>:-static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>
346-
$<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>)
367+
$<$<CONFIG:DEBUG>:-static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>
368+
$<$<CONFIG:RELEASE>:-s -static -stdlib=libc++ -Wl"/DEF:RemoteInput/RemoteInput.def" ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>)
347369
ELSE()
348370
target_compile_options(${PROJECT_NAME} PRIVATE
349371
$<$<CONFIG:DEBUG>:-DDEBUG -g -fvisibility=hidden>
350372
$<$<CONFIG:RELEASE>:-O3 -fvisibility=hidden>)
351373
target_link_options(${PROJECT_NAME} PRIVATE
352-
$<$<CONFIG:DEBUG>:-g ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}> #-static-libgcc -static-libstdc++
353-
$<$<CONFIG:RELEASE>:-s ${Python_LINK_OPTIONS} ${PYTHON_DYNAMIC_LINKER_FLAGS}>) #-static-libgcc -static-libstdc++
374+
$<$<CONFIG:DEBUG>:-g ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}> #-static-libgcc -static-libstdc++
375+
$<$<CONFIG:RELEASE>:-s ${PY_LINK_OPTIONS} ${PY_DYNAMIC_LINKER_FLAGS}>) #-static-libgcc -static-libstdc++
354376
ENDIF()
355377

356-
target_link_libraries(${PROJECT_NAME} ${LIBRARIES_LIST} ${EXTRA_LIBRARIES})
378+
IF(PYTHON_BINDINGS)
379+
IF(USE_PYTHON3)
380+
set(PY_MODULE Python3::Python)
381+
ELSE()
382+
set(PY_MODULE Python::Python)
383+
ENDIF()
384+
385+
IF(USE_PYBIND11)
386+
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRARIES_LIST} ${EXTRA_LIBRARIES} ${PY_LIBRARIES} ${PY_MODULE}) #nanobind::module
387+
ELSE()
388+
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRARIES_LIST} ${EXTRA_LIBRARIES} ${PY_LIBRARIES})
389+
ENDIF()
390+
ELSE()
391+
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRARIES_LIST} ${EXTRA_LIBRARIES})
392+
ENDIF()
393+
394+
395+
# ---------------------------- RENAME ----------------------------
396+
397+
IF(WIN32)
398+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
399+
COMMAND ${CMAKE_COMMAND} -E rename
400+
$<TARGET_FILE:${PROJECT_NAME}>
401+
${CMAKE_BINARY_DIR}/libRemoteInput.dll
402+
COMMENT "Renaming module to RemoteInput.dll"
403+
)
404+
ELSEIF(APPLE)
405+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
406+
COMMAND ${CMAKE_COMMAND} -E rename
407+
$<TARGET_FILE:${PROJECT_NAME}>
408+
${CMAKE_BINARY_DIR}/libRemoteInput.dylib
409+
COMMENT "Renaming module to RemoteInput.dylib"
410+
)
411+
ELSE()
412+
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
413+
COMMAND ${CMAKE_COMMAND} -E rename
414+
$<TARGET_FILE:${PROJECT_NAME}>
415+
${CMAKE_BINARY_DIR}/libRemoteInput.so
416+
COMMENT "Renaming module to RemoteInput.so"
417+
)
418+
ENDIF()

RemoteInput/Echo/MemoryMap.cxx

+6-6
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,16 @@ bool MemoryMap::open(open_mode mode) noexcept
6363

6464
if (open_only)
6565
{
66-
hFile = shm_open(path.c_str(), dwFlags, S_IRWXU);
66+
hFile = shm_open(path.c_str(), dwFlags, S_IRWXU | S_IRWXO);
6767
}
6868
else
6969
{
7070
created = true;
71-
hFile = shm_open(path.c_str(), dwFlags | O_CREAT | O_EXCL, S_IRWXU);
71+
hFile = shm_open(path.c_str(), dwFlags | O_CREAT | O_EXCL, S_IRWXU | S_IRWXO);
7272
if (hFile == -1 && errno == EEXIST)
7373
{
7474
created = false;
75-
hFile = shm_open(path.c_str(), dwFlags, S_IRWXU);
75+
hFile = shm_open(path.c_str(), dwFlags, S_IRWXU | S_IRWXO);
7676
}
7777
}
7878

@@ -164,14 +164,14 @@ bool MemoryMap::open_file(open_mode mode) noexcept
164164

165165
if (open_only)
166166
{
167-
hFile = ::open(path.c_str(), dwFlags, S_IRWXU);
167+
hFile = ::open(path.c_str(), dwFlags, S_IRWXU | S_IRWXO);
168168
}
169169
else
170170
{
171-
hFile = ::open(path.c_str(), dwFlags | (!open_only ? O_CREAT | O_EXCL | O_TRUNC : 0), S_IRWXU);
171+
hFile = ::open(path.c_str(), dwFlags | O_CREAT | O_EXCL | O_TRUNC, S_IRWXU | S_IRWXO);
172172
if (hFile == -1 && errno == EEXIST)
173173
{
174-
hFile = ::open(path.c_str(), dwFlags, S_IRWXU);
174+
hFile = ::open(path.c_str(), dwFlags, S_IRWXU | S_IRWXO);
175175
}
176176
}
177177

0 commit comments

Comments
 (0)