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. */ } }
parent
75d5f34398
commit
b5ea3c6d07
|
@ -60,9 +60,7 @@ SDL_setenv(const char *name, const char *value, int overwrite)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!overwrite) {
|
if (!overwrite) {
|
||||||
char ch = 0;
|
if (GetEnvironmentVariableA(name, NULL, 0) > 0) {
|
||||||
const size_t len = GetEnvironmentVariableA(name, &ch, sizeof (ch));
|
|
||||||
if (len > 0) {
|
|
||||||
return 0; /* asked not to overwrite existing value. */
|
return 0; /* asked not to overwrite existing value. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue