git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit3501633898c7b13c12dcfabe8385a6d3167f0a7d
parentbe3cc33cb7
authorLucas Galante <[email protected]>
date2026-06-24 14:42
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 {