diff --git a/systeroid-core/src/sysctl/controller.rs b/systeroid-core/src/sysctl/controller.rs index 66c6ba6..6162190 100644 --- a/systeroid-core/src/sysctl/controller.rs +++ b/systeroid-core/src/sysctl/controller.rs @@ -57,6 +57,30 @@ impl Sysctl { parameter } + /// Returns the parameters that matches the given query. + pub fn get_parameters(&self, query: &str) -> Vec<&Parameter> { + let parameters = self + .parameters + .iter() + .filter(|param| { + param.name == query.replace("/", ".") + || param.section.to_string() == query + || match param.name.split('.').collect::>().last() { + Some(absolute_name) => absolute_name == &query.replace("/", "."), + _ => false, + } + }) + .collect::>(); + if parameters.is_empty() { + eprintln!( + "{}: cannot stat /proc/{}: No such file or directory", + env!("CARGO_PKG_NAME").split('-').collect::>()[0], + query.replace(".", "/") + ) + } + parameters + } + /// Updates the parameters using the given list. /// /// Keeps the original values. diff --git a/systeroid/src/app.rs b/systeroid/src/app.rs index 75fba87..76280c4 100644 --- a/systeroid/src/app.rs +++ b/systeroid/src/app.rs @@ -121,12 +121,15 @@ impl<'a> App<'a> { } else { None }; - if let Some(parameter) = self.sysctl.get_parameter(¶m_name) { - if let Some(new_value) = new_value { + if let Some(new_value) = new_value { + if let Some(parameter) = self.sysctl.get_parameter(¶m_name) { parameter.update_value(&new_value, self.config, &mut self.stdout)?; - } else { - parameter.display_value(self.config, &mut self.stdout)?; } + } else { + self.sysctl + .get_parameters(¶m_name) + .iter() + .try_for_each(|parameter| parameter.display_value(self.config, &mut self.stdout))?; } Ok(()) }