diff options
-rw-r--r-- | src/nvim/os/env.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c index 6cf48eb814..4f14e4eee3 100644 --- a/src/nvim/os/env.c +++ b/src/nvim/os/env.c @@ -36,8 +36,25 @@ const char *os_getenv(const char *name) FUNC_ATTR_NONNULL_ALL { +#if !defined(WIN32) const char *e = getenv(name); return e == NULL || *e == NUL ? NULL : e; +#else + wchar_t *wname; + utf8_to_utf16(name, &wname); + if (wname == NULL) { + xfree(wname); + return NULL; + } + wchar_t *wvalue = _wgetenv(wname); + char *value; + int rv = utf16_to_utf8(wvalue, &value); + if (rv != 0 || *value == NUL) { + xfree(value); + return NULL; + } + return value; // TODO(jmk): this was allocated, but callers don't free it ... +#endif } /// Returns `true` if the environment variable, `name`, has been defined |