config.rs: better env variable matching
This commit is contained in:
parent
8fa2bd97af
commit
7b4d68e963
|
@ -57,31 +57,48 @@ 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() {
|
||||||
if unsafe { libc::geteuid() } == 0 {
|
Some(home) => home,
|
||||||
dir = match xdg {
|
None => {
|
||||||
"XDG_CACHE_HOME" => "/var".to_owned(),
|
return Err((
|
||||||
"XDG_CONFIG_HOME" => "/etc".to_owned(),
|
"Unable to determine path to current user’s home directory."
|
||||||
_ => panic!("nya"),
|
.to_string(),
|
||||||
};
|
EX_UNAVAILABLE
|
||||||
} else {
|
));
|
||||||
dir = match env::var(xdg) {
|
}
|
||||||
Ok(var) => var,
|
};
|
||||||
Err(_) => {
|
let mut root = false;
|
||||||
match env::var("HOME") {
|
|
||||||
Ok(home) => format!("{}/.config", home),
|
|
||||||
Err(_) => {
|
|
||||||
return Err((
|
|
||||||
"Unable to determine path to current user’s home directory."
|
|
||||||
.to_string(),
|
|
||||||
EX_UNAVAILABLE
|
|
||||||
));
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if unsafe { libc::geteuid() } == 0 { root = true; }
|
||||||
|
|
||||||
|
dir = match (root, env::var(xdg).ok()) {
|
||||||
|
(false, Some(var)) => var,
|
||||||
|
(su, None) => {
|
||||||
|
match xdg {
|
||||||
|
"XDG_CACHE_HOME" => {
|
||||||
|
if su { "/var".to_owned() }
|
||||||
|
else { format!("{}/.cache", home_dir) }
|
||||||
|
},
|
||||||
|
"XDG_CONFIG_HOME" => {
|
||||||
|
if su { "/etc".to_owned() }
|
||||||
|
else { format!("{}/.config", home_dir) }
|
||||||
|
},
|
||||||
|
"XDG_DATA_HOME" => {
|
||||||
|
if su { "/usr/share".to_owned() }
|
||||||
|
else { format!("{}/.local/share", home_dir) }
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
return Err(
|
||||||
|
(format!("{}: Unimplemented variable.", xdg), EX_SOFTWARE)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
panic!("nya");
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
Ok(format!("{}/plaque", dir))
|
Ok(format!("{}/plaque", dir))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue