From 0ec3b951795b04359ddc99ef9199a45a9b60bf03 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Tue, 25 Sep 2018 18:43:06 +0200 Subject: state_load_map_group(): Log errors instead of panicking This allows us to log the errors without exiting the program. --- src/cocoa_bridge.rs | 57 ++++++++++++++++++++++++++++++++--------------------- src/lib.rs | 3 +++ 2 files changed, 37 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index 0eb603a..5c7c40d 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -114,29 +114,40 @@ pub extern "C" fn state_free(ptr: *mut State) { #[no_mangle] pub extern "C" fn state_load_map_group(ptr: *mut State) { - let xdg_dirs = xdg::BaseDirectories::with_prefix("dome-key").unwrap(); - let mapping_file = xdg_dirs.find_config_file("mappings.dkmap") - .expect( - &format!( - "No mapping file found at '{}{}'", - xdg_dirs.get_config_home() - .to_str() - .expect("Config home path contains invalid unicode"), - "mappings.dkmap" - ) - ); - - let state = unsafe { - assert!(!ptr.is_null()); - &mut *ptr - }; - - let dkmap = fs::read_to_string(mapping_file) - .expect("Failed to read 'mappings.dkmap'"); - state.map_group = Some( - MapGroup::parse(&dkmap) - .expect("Failed to parse 'mappings.dkmap'") - ); + match xdg::BaseDirectories::with_prefix("dome-key") { + Ok(xdg_dirs) => { + match xdg_dirs.find_config_file("mappings.dkmap") { + Some(mapping_file) => { + let state = unsafe { + assert!(!ptr.is_null()); + &mut *ptr + }; + + let dkmap = fs::read_to_string(mapping_file) + .expect("Failed to read 'mappings.dkmap'"); + state.map_group = Some( + MapGroup::parse(&dkmap) + .expect("Failed to parse 'mappings.dkmap'") + ); + }, + None => { + match xdg_dirs.get_config_home().to_str() { + Some(config_home) => { + error!( + "No mapping file found at '{}{}'", + config_home, + "mappings.dkmap" + ) + }, + None => { + error!("Config home path contains invalid unicode") + } + } + }, + } + }, + Err(e) => error!("{}", e), + } } #[no_mangle] diff --git a/src/lib.rs b/src/lib.rs index 16be4e0..13d70e8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,9 @@ extern crate autopilot; #[macro_use] extern crate combine; extern crate libc; + +#[macro_use] +extern crate log; extern crate xdg; mod cocoa_bridge; -- cgit v1.2.3