use std::env;
pub fn _comp_locale() -> i32 {
let _fn_scope = crate::compsys::ported::shared::FnScope::enter("_comp_locale");
let ctype = env::var("LC_ALL")
.ok()
.filter(|s| !s.is_empty())
.or_else(|| env::var("LC_CTYPE").ok().filter(|s| !s.is_empty()))
.or_else(|| env::var("LANG").ok().filter(|s| !s.is_empty()))
.unwrap_or_else(|| "C".to_string());
let lc_vars: Vec<String> = env::vars()
.filter_map(|(k, _)| if k.starts_with("LC_") { Some(k) } else { None })
.collect();
for k in lc_vars {
env::remove_var(&k);
}
env::set_var("LC_CTYPE", ctype);
env::set_var("LANG", "C");
0
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sets_lang_to_c() {
let _g = crate::test_util::global_state_lock();
env::set_var("LANG", "en_US.UTF-8");
let _ = _comp_locale();
assert_eq!(env::var("LANG").as_deref(), Ok("C"));
}
#[test]
fn preserves_lc_ctype_from_pre_existing_var() {
let _g = crate::test_util::global_state_lock();
env::set_var("LC_CTYPE", "en_US.UTF-8");
env::remove_var("LC_ALL");
let _ = _comp_locale();
assert_eq!(env::var("LC_CTYPE").as_deref(), Ok("en_US.UTF-8"));
}
}