config.rs: better env variable matching

This commit is contained in:
Emma Tebibyte 2023-03-25 16:23:26 -04:00
parent 8fa2bd97af
commit 7b4d68e963
Signed by: emma
GPG Key ID: 6D661C738815E7DD
1 changed files with 41 additions and 24 deletions

View File

@ -57,30 +57,47 @@ pub struct PageMeta {
pub fn get_path(xdg: &str) -> Result<String, (String, u32)> { pub fn get_path(xdg: &str) -> Result<String, (String, u32)> {
let dir: String; let dir: String;
let home_dir = match env::var("HOME").ok() {
Some(home) => home,
None => {
return Err((
"Unable to determine path to current users home directory."
.to_string(),
EX_UNAVAILABLE
));
}
};
let mut root = false;
if unsafe { libc::geteuid() } == 0 { if unsafe { libc::geteuid() } == 0 { root = true; }
dir = match xdg {
"XDG_CACHE_HOME" => "/var".to_owned(), dir = match (root, env::var(xdg).ok()) {
"XDG_CONFIG_HOME" => "/etc".to_owned(), (false, Some(var)) => var,
_ => panic!("nya"), (su, None) => {
}; match xdg {
} else { "XDG_CACHE_HOME" => {
dir = match env::var(xdg) { if su { "/var".to_owned() }
Ok(var) => var, else { format!("{}/.cache", home_dir) }
Err(_) => { },
match env::var("HOME") { "XDG_CONFIG_HOME" => {
Ok(home) => format!("{}/.config", home), if su { "/etc".to_owned() }
Err(_) => { else { format!("{}/.config", home_dir) }
return Err(( },
"Unable to determine path to current users home directory." "XDG_DATA_HOME" => {
.to_string(), if su { "/usr/share".to_owned() }
EX_UNAVAILABLE else { format!("{}/.local/share", home_dir) }
)); },
}, _ => {
} return Err(
}, (format!("{}: Unimplemented variable.", xdg), EX_SOFTWARE)
}; );
} },
}
},
_ => {
panic!("nya");
},
};
Ok(format!("{}/plaque", dir)) Ok(format!("{}/plaque", dir))
} }