From d3984f77f04a20699b63db3fa434669410299fa4 Mon Sep 17 00:00:00 2001 From: mattsu Date: Tue, 2 Dec 2025 15:41:54 +0900 Subject: [PATCH] refactor: optimize stty save format parsing by checking for ':' first Changed the parsing logic in the stty function to only attempt parsing saved state when the first argument contains ':', improving efficiency and avoiding unnecessary parse calls for regular settings. This refactors the code for clarity while maintaining equivalent functionality. --- src/uu/stty/src/stty.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/uu/stty/src/stty.rs b/src/uu/stty/src/stty.rs index 5f679c596..1120b43d0 100644 --- a/src/uu/stty/src/stty.rs +++ b/src/uu/stty/src/stty.rs @@ -288,18 +288,21 @@ fn stty(opts: &Options) -> UResult<()> { if let Some(args) = &opts.settings { if let Some((first, rest)) = args.split_first() { - let base = get_base_termios(opts.file.as_fd())?; - let mut restored = base.clone(); - match parse_save_format(first, &mut restored) { - Ok(()) => { - restored_from_save = Some(restored); - settings_iter = Box::new(rest.iter().copied()); - } - // GNU stty errors immediately when the first argument looks like save format but cannot be parsed - Err(e) if first.contains(':') => return Err(e), - Err(_) => { - settings_iter = Box::new(args.iter().map(|s| &**s)); + if first.contains(':') { + // Only attempt to parse saved state when the first arg actually looks like one. + let base = get_base_termios(opts.file.as_fd())?; + let mut restored = base.clone(); + match parse_save_format(first, &mut restored) { + Ok(()) => { + restored_from_save = Some(restored); + settings_iter = Box::new(rest.iter().copied()); + } + // GNU stty errors immediately when the first argument looks like save format but cannot be parsed + Err(e) => return Err(e), } + } else { + // First argument is not a saved state; treat the whole list as regular settings. + settings_iter = Box::new(args.iter().map(|s| &**s)); } } }