From b5ea3c6d0747bd67f8a9214300c231a3e4c89abb Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 11 Aug 2017 21:30:06 -0700 Subject: [PATCH] Fixed bug 3284 - minor correction for SDL_setenv on _WIN32__ platform Coriiander Here is a minor correction for a non-breaking mistake in SDL_setenv for __WIN32__ platform. See below for details. FILE: "SDL/src/stdlib/SDL_getenv.c" FUNCTION: (__WIN32__ platform) int SDL_setenv(const char *name, const char *value, int overwrite) CODE: if (!overwrite) { char ch = 0; const size_t len = GetEnvironmentVariableA(name, &ch, sizeof (ch)); if (len > 0) { return 0; /* asked not to overwrite existing value. */ } } WHAT'S WRONG: The 3th argument to GetEnvironmentVariable (being DWORD nSize) must be the number of characters, not the number of bytes. SDL currently passes "the size of 1 char", rather "1". While it is non-breaking (1=1 after all), it is incorrect. Furthermore there is no need to specify the 2nd and 3th arguments at all. CORRECTION 1: (corrected argument_ if (!overwrite) { char ch = 0; const size_t len = GetEnvironmentVariableA(name, &ch, 1); if (len > 0) { return 0; /* asked not to overwrite existing value. */ } } CORRECTION 2: (stripped of unneeded code) if (!overwrite) { if (GetEnvironmentVariableA(name, NULL, 0) > 0) { return 0; /* asked not to overwrite existing value. */ } } --- src/stdlib/SDL_getenv.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/stdlib/SDL_getenv.c b/src/stdlib/SDL_getenv.c index 8c7fc351e..305307feb 100644 --- a/src/stdlib/SDL_getenv.c +++ b/src/stdlib/SDL_getenv.c @@ -60,9 +60,7 @@ SDL_setenv(const char *name, const char *value, int overwrite) } if (!overwrite) { - char ch = 0; - const size_t len = GetEnvironmentVariableA(name, &ch, sizeof (ch)); - if (len > 0) { + if (GetEnvironmentVariableA(name, NULL, 0) > 0) { return 0; /* asked not to overwrite existing value. */ } }