diff --git a/local/recipes/system/redbear-btctl/source/src/backend.rs b/local/recipes/system/redbear-btctl/source/src/backend.rs index 7383661376..d590c5c598 100644 --- a/local/recipes/system/redbear-btctl/source/src/backend.rs +++ b/local/recipes/system/redbear-btctl/source/src/backend.rs @@ -176,7 +176,7 @@ pub struct StubBackend { } impl StubBackend { - pub fn from_env() -> Self { + pub fn try_from_env() -> Result { let adapters = parse_list( env::var("REDBEAR_BTCTL_STUB_ADAPTERS").ok().as_deref(), &["hci0"], @@ -188,12 +188,14 @@ impl StubBackend { &[], ); for adapter in &adapters { - if validate_adapter_name(adapter).is_err() { - panic!("invalid Bluetooth adapter name in REDBEAR_BTCTL_STUB_ADAPTERS: {adapter}"); + if let Err(e) = validate_adapter_name(adapter) { + return Err(format!( + "invalid Bluetooth adapter name in REDBEAR_BTCTL_STUB_ADAPTERS: {adapter}: {e}" + )); } } - Self { + Ok(Self { runtime_state: adapters .iter() .cloned() @@ -212,7 +214,7 @@ impl StubBackend { .map(PathBuf::from) .unwrap_or_else(|| PathBuf::from("/var/run/redbear-btusb/status")), bond_store: BondStore::from_env(), - } + }) } #[cfg(test)] diff --git a/local/recipes/system/redbear-btctl/source/src/main.rs b/local/recipes/system/redbear-btctl/source/src/main.rs index c348c5c495..ac55b79a91 100644 --- a/local/recipes/system/redbear-btctl/source/src/main.rs +++ b/local/recipes/system/redbear-btctl/source/src/main.rs @@ -73,12 +73,14 @@ fn notify_scheme_ready(notify_fd: Option, socket: &Socket, scheme: &mut B } } -fn build_backend() -> Box { +fn build_backend() -> anyhow::Result> { let backend_type = env::var("REDBEAR_BTCTL_BACKEND") .unwrap_or_else(|_| "stub".to_string()); match backend_type.as_str() { - "hci" => Box::new(hci_backend::HciBackend::from_env()), - _ => Box::new(StubBackend::from_env()), + "hci" => Ok(Box::new(hci_backend::HciBackend::from_env())), + _ => Ok(Box::new(StubBackend::try_from_env().map_err(|e| { + anyhow::anyhow!("{e}") + })?)), } } @@ -424,7 +426,7 @@ fn main() -> anyhow::Result<()> { init_logging(log_level); let args = env::args().skip(1).collect::>(); - let mut backend = build_backend(); + let mut backend = build_backend()?; match execute(&args, backend.as_mut()) { Ok(Some(output)) => { @@ -452,7 +454,7 @@ fn main() -> anyhow::Result<()> { process::exit(1); } }; - let mut scheme = BtCtlScheme::new(build_backend()); + let mut scheme = BtCtlScheme::new(build_backend()?); let mut state = redox_scheme::scheme::SchemeState::new(); notify_scheme_ready(notify_fd, &socket, &mut scheme);