From 9734bdbde63515e51d4a0719a37a43e12add1fea Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 31 Dec 2025 02:29:55 +0700 Subject: [PATCH] Fix setlocale with "C" --- src/header/locale/mod.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/header/locale/mod.rs b/src/header/locale/mod.rs index f03ac3560f..7e7b7a1de6 100644 --- a/src/header/locale/mod.rs +++ b/src/header/locale/mod.rs @@ -72,7 +72,14 @@ pub unsafe extern "C" fn setlocale(category: c_int, locale: *const c_char) -> *m let name = CStr::from_ptr(locale).to_str().unwrap_or("C"); - match load_locale_file(name) { + let locale_file = if name == "" || name == "C" || name == "POSIX" { + // TODO: name == "" should read from LANG env + Ok(LocaleData::posix()) + } else { + load_locale_file(name) + }; + + match locale_file { Ok(loc_ptr) => { global.data.copy_category(&loc_ptr, category); let Some(name) = global.set_name(category, CString::from_str(name).unwrap()) else { @@ -109,6 +116,7 @@ pub unsafe extern "C" fn newlocale(mask: c_int, locale: *const c_char, base: loc let name = CStr::from_ptr(locale).to_string_lossy().into_owned(); let name = name.as_str(); let mut new_locale = if name == "" || name == "C" || name == "POSIX" { + // TODO: name == "" should read from LANG env Ok(LocaleData::posix()) } else { load_locale_file(name)