From 4b48d42a0760313de4e6314a4c1532342d2b7f8b Mon Sep 17 00:00:00 2001 From: Thorsten Ball Date: Wed, 19 Jul 2023 06:44:35 +0200 Subject: [PATCH] locale: set LANG to the fallback value if we have invalid locale See #201 for more information. Problem is that while we fall back to a default value to pass to `setlocale`, we don't set a `LANG` and instead reset it to `""`. What this does here is it changes the resetting to `""` and instead sets it to the default value. --- src/os/locale.zig | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/os/locale.zig b/src/os/locale.zig index bd46735e1..49900f061 100644 --- a/src/os/locale.zig +++ b/src/os/locale.zig @@ -35,16 +35,17 @@ pub fn ensureLocale() void { // If the locale is valid, we also use "" because LANG is already set. if (localeIsValid(new_lang)) break :locale ""; - // If the locale is not valid, and our lang changed, then we reset - // to the old value. - if (!std.mem.eql(u8, lang, new_lang)) { - if (setenv("LANG", lang.ptr, 1) < 0) { - log.err("error resetting locale env var", .{}); - } + // If the locale is not valid we fall back to en_US.UTF-8 and need to + // set LANG to this value too. + const default_locale = "en_US.UTF-8"; + log.info("LANG is not valid according to libc, will use en_US.UTF-8", .{}); + + if (setenv("LANG", default_locale.ptr, 1) < 0) { + log.err("error setting LANG env var to {s}", .{default_locale}); } - log.info("LANG is not valid according to libc, will use en_US.UTF-8", .{}); - break :locale "en_US.UTF-8"; + // Use it as locale + break :locale default_locale; }; // Set the locale