aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/env.c
diff options
context:
space:
mode:
authorerw7 <erw7.github@gmail.com>2019-09-22 16:02:28 +0900
committerJustin M. Keyes <justinkz@gmail.com>2019-09-22 00:02:28 -0700
commit028d76e5d58f1545f29b76c39e18c5b5da0c16e3 (patch)
tree862ba58b7e1e23719c1610a93a036a6c9a6b3a3b /src/nvim/os/env.c
parentc534ab84474a111ce969b69aba137ee63849cbb9 (diff)
downloadrneovim-028d76e5d58f1545f29b76c39e18c5b5da0c16e3.tar.gz
rneovim-028d76e5d58f1545f29b76c39e18c5b5da0c16e3.tar.bz2
rneovim-028d76e5d58f1545f29b76c39e18c5b5da0c16e3.zip
env: use putenv_s for LC_ALL, LANG, etc. #11050
Problem: ":lang messages en_US.UTF-8" no longer overrides the language detected from the environment (at startup). Solution: In os_setenv, special-case "LC_ALL", "LANG", et al. to use putenv_s instead of uv_os_setenv. fixes #11045
Diffstat (limited to 'src/nvim/os/env.c')
-rw-r--r--src/nvim/os/env.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c
index f5dbf0694e..54fdd7961c 100644
--- a/src/nvim/os/env.c
+++ b/src/nvim/os/env.c
@@ -135,7 +135,16 @@ int os_setenv(const char *name, const char *value, int overwrite)
}
#endif
uv_mutex_lock(&mutex);
- int r = uv_os_setenv(name, value);
+ int r;
+#ifdef WIN32
+ // libintl uses getenv() for LC_ALL/LANG/etc., so we must use _putenv_s().
+ if (striequal(name, "LC_ALL") || striequal(name, "LANGUAGE")
+ || striequal(name, "LANG") || striequal(name, "LC_MESSAGES")) {
+ r = _putenv_s(name, value); // NOLINT
+ assert(r == 0);
+ }
+#endif
+ r = uv_os_setenv(name, value);
assert(r != UV_EINVAL);
// Destroy the old map item. Do this AFTER uv_os_setenv(), because `value`
// could be a previous os_getenv() result.