summaryrefslogtreecommitdiff
path: root/init/src/processes/udev.rs
diff options
context:
space:
mode:
Diffstat (limited to 'init/src/processes/udev.rs')
-rw-r--r--init/src/processes/udev.rs29
1 files changed, 29 insertions, 0 deletions
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(())
+}