Commit f36d65c7 authored by Martin v. Löwis's avatar Martin v. Löwis

Use GetEnvironmentVariableW instead of _wgetenv to silence VC warnings.

parent 56bf6f82
...@@ -54,22 +54,31 @@ skip_whitespace(wchar_t * p) ...@@ -54,22 +54,31 @@ skip_whitespace(wchar_t * p)
} }
/* /*
* This function is here to minimise Visual Studio * This function is here to simplify memory management
* warnings about security implications of getenv, and to * and to treat blank values as if they are absent.
* treat blank values as if they are absent.
*/ */
static wchar_t * get_env(wchar_t * key) static wchar_t * get_env(wchar_t * key)
{ {
wchar_t * result = _wgetenv(key); /* This is not thread-safe, just like getenv */
static wchar_t buf[256];
if (result) { DWORD result = GetEnvironmentVariableW(key, buf, 256);
result = skip_whitespace(result);
if (*result == L'\0') if (result > 256) {
result = NULL; /* Large environment variable. Accept some leakage */
wchar_t *buf2 = (wchar_t*)malloc(sizeof(wchar_t) * (result+1));
GetEnvironmentVariableW(key, buf2, result);
return buf2;
} }
return result;
if (result == 0)
/* Either some error, e.g. ERROR_ENVVAR_NOT_FOUND,
or an empty environment variable. */
return NULL;
return buf;
} }
static void static void
debug(wchar_t * format, ...) debug(wchar_t * format, ...)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment