diff options
Diffstat (limited to 'init/src/processes')
| -rw-r--r-- | init/src/processes/mod.rs | 1 | ||||
| -rw-r--r-- | init/src/processes/udev.rs | 29 |
2 files changed, 30 insertions, 0 deletions
diff --git a/init/src/processes/mod.rs b/init/src/processes/mod.rs new file mode 100644 index 0000000..73b363e --- /dev/null +++ b/init/src/processes/mod.rs @@ -0,0 +1 @@ +pub mod udev; diff --git a/init/src/processes/udev.rs b/init/src/processes/udev.rs new file mode 100644 index 0000000..7cb6a5d --- /dev/null +++ b/init/src/processes/udev.rs @@ -0,0 +1,29 @@ +use std::process::Command; + +// TODO: Rewrite this bad fn +pub fn spawn_udev() -> Result<(), Box<dyn std::error::Error>> { + let udevd_paths = [ + "/sbin/udevd", + "/usr/sbin/udevd", + "/bin/udevd", + "/usr/bin/udevd", + ]; + let udevd_path = udevd_paths + .iter() + .find(|path| std::path::Path::new(path).exists()) + .ok_or_else(|| -> Box<dyn std::error::Error> { + "udevd not found in standard locations".into() + })?; + + let mut child = Command::new(udevd_path).arg("--daemon").spawn().map_err( + |e| -> Box<dyn std::error::Error> { format!("Failed to spawn udevd: {}", e).into() }, + )?; + + child.wait()?; + + Command::new(udevd_path).arg("--trigger").output().map_err( + |e| -> Box<dyn std::error::Error> { format!("Failed to trigger udev: {}", e).into() }, + )?; + + Ok(()) +} |
