--- a/Win32OperatingSystem.st Wed Jul 26 11:24:23 2017 +0200
+++ b/Win32OperatingSystem.st Wed Jul 26 12:13:46 2017 +0200
@@ -8364,35 +8364,35 @@
int i, l;
if (__isStringLike(aStringOrSymbol)) {
- l = __stringSize(aStringOrSymbol);
- if (l > ENV_BUFSIZE-1)
- goto badArgument;
- for (i=0; i<l; i++) {
- _varName[i] = __stringVal(aStringOrSymbol)[i];
- }
+ l = __stringSize(aStringOrSymbol);
+ if (l > ENV_BUFSIZE-1)
+ goto badArgument;
+ for (i=0; i<l; i++) {
+ _varName[i] = __stringVal(aStringOrSymbol)[i];
+ }
} else if (__isUnicode16String(aStringOrSymbol)) {
- l = __unicode16StringSize(aStringOrSymbol);
- if (l > ENV_BUFSIZE-1)
- goto badArgument;
- for (i=0; i<l; i++) {
- _varName[i] = __unicode16StringVal(aStringOrSymbol)[i];
- }
+ l = __unicode16StringSize(aStringOrSymbol);
+ if (l > ENV_BUFSIZE-1)
+ goto badArgument;
+ for (i=0; i<l; i++) {
+ _varName[i] = __unicode16StringVal(aStringOrSymbol)[i];
+ }
} else {
- goto badArgument;
+ goto badArgument;
}
_varName[l] = 0;
nNeeded = GetEnvironmentVariableW(_varName, buff, ENV_BUFSIZE);
- if (nNeeded > sizeof(buff)) {
- WCHAR *buff2;
-
- buff2 = (char *)malloc(nNeeded * sizeof(WCHAR));
- GetEnvironmentVariableW(_varName, buff2, nNeeded);
- ret = __mkStringOrU16String_maxlen(buff2, nNeeded);
- free(buff2);
+ if (nNeeded > ENV_BUFSIZE) {
+ WCHAR *buff2;
+
+ buff2 = (WCHAR *)malloc(nNeeded+1 * sizeof(WCHAR));
+ GetEnvironmentVariableW(_varName, buff2, nNeeded);
+ ret = __mkStringOrU16String_maxlen(buff2, nNeeded);
+ free(buff2);
} else if (nNeeded > 0) {
- ret = __mkStringOrU16String_maxlen(buff, nNeeded);
- // console_printf("getenv() -> %"_lx_"\n", (INT)ret);
+ ret = __mkStringOrU16String_maxlen(buff, nNeeded);
+ // console_printf("getenv() -> %"_lx_"\n", (INT)ret);
}
RETURN (ret);