From 02534ae910d0251789e15e278ccfec93e5f4278f Mon Sep 17 00:00:00 2001 From: HimbeerserverDE Date: Fri, 5 May 2023 18:29:41 +0200 Subject: use non-utf8-sensitive cmdline replacement routine --- src/main.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 696a2ba..5c198b0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -156,11 +156,28 @@ fn validate_credentials(user_id: &str, user_password: &str) -> io::Result )) } +fn replace_slice(src: &mut [T], old: &[T], new: &[T]) +where + T: Clone + PartialEq, +{ + let iteration = if src.starts_with(old) { + src[..old.len()].clone_from_slice(new); + old.len() + } else { + 1 + }; + + if src.len() > old.len() { + replace_slice(&mut src[iteration..], old, new); + } +} + fn modify_cmdline(old: &str, new: &str) -> Result<()> { let boot = boot_dev()?; - let cmdline = fs::read_to_string(boot)?; - fs::write(boot, cmdline.replace(old, new))?; + let mut cmdline = fs::read(boot)?; + replace_slice(&mut cmdline, old.as_bytes(), new.as_bytes()); + fs::write(boot, cmdline)?; Ok(()) } -- cgit v1.2.3