From: Martin v. Löwis Date: Thu, 21 Jun 2012 14:33:09 +0000 (+0200) Subject: Use GetEnvironmentVariableW instead of _wgetenv to silence VC warnings. X-Git-Tag: v3.3.0b1~168^2~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f36d65c7c87234814867661f5089e903ae7319e7;p=python Use GetEnvironmentVariableW instead of _wgetenv to silence VC warnings. --- diff --git a/PC/launcher.c b/PC/launcher.c index 22d2974d87..5792d1b9cf 100644 --- a/PC/launcher.c +++ b/PC/launcher.c @@ -54,22 +54,31 @@ skip_whitespace(wchar_t * p) } /* - * This function is here to minimise Visual Studio - * warnings about security implications of getenv, and to - * treat blank values as if they are absent. + * This function is here to simplify memory management + * and to treat blank values as if they are absent. */ static wchar_t * get_env(wchar_t * key) { - wchar_t * result = _wgetenv(key); - - if (result) { - result = skip_whitespace(result); - if (*result == L'\0') - result = NULL; + /* This is not thread-safe, just like getenv */ + static wchar_t buf[256]; + DWORD result = GetEnvironmentVariableW(key, buf, 256); + + if (result > 256) { + /* 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 debug(wchar_t * format, ...) {