Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
fix: prevent segfault on reload_config by using safe C wrapper for wlr_input_device.name
src/server/input_manager.rs | 2 +-
src/server/window_manager.rs | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/server/input_manager.rs b/src/server/input_manager.rs
index 98f1c45..4a22e27 100644
--- a/src/server/input_manager.rs
+++ b/src/server/input_manager.rs
@@ -339,7 +339,7 @@ unsafe extern "C" fn handle_new_input(listener: *mut ffi::wl_listener, data: *mu
let device = crate::input_device::InputDevice::new(im.default_seat, wlr_device, false);
- let name_ptr = (*wlr_device).name;
+ let name_ptr = ffi::river_wlr_input_device_get_name(wlr_device);
if !name_ptr.is_null() {
let name = std::ffi::CStr::from_ptr(name_ptr).to_string_lossy();
let wm = &mut (*im.server).wm;
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 5bf3605..01cff0c 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -1988,7 +1988,7 @@ fn get_closest_tag(x: f64, y: f64) -> i32 {
while curr != devices_head {
let next = (*curr).next;
let device = crate::container_of!(curr, crate::input_device::InputDevice, link);
- let name_ptr = (*(*device).wlr_device).name;
+ let name_ptr = ffi::river_wlr_input_device_get_name((*device).wlr_device);
if !name_ptr.is_null() {
let name = std::ffi::CStr::from_ptr(name_ptr).to_string_lossy();
if device_name == "*" || name.contains(device_name) {
@@ -2042,7 +2042,7 @@ fn get_closest_tag(x: f64, y: f64) -> i32 {
while curr != devices_head {
let next = (*curr).next;
let device = crate::container_of!(curr, crate::input_device::InputDevice, link);
- let name_ptr = (*(*device).wlr_device).name;
+ let name_ptr = ffi::river_wlr_input_device_get_name((*device).wlr_device);
if !name_ptr.is_null() {
let name = std::ffi::CStr::from_ptr(name_ptr).to_string_lossy();
for rule in &self.input_rules {