--- a/Win32OperatingSystem.st Wed Jul 26 12:13:46 2017 +0200
+++ b/Win32OperatingSystem.st Wed Jul 26 12:24:07 2017 +0200
@@ -8353,42 +8353,44 @@
!
getEnvironment:aStringOrSymbol
- "get the whole environment as a dictionary"
-
-%{ /* NOCONTEXT */
-# define ENV_BUFSIZE 2048
+ "get an individual environment variable's value"
+
+%{ /* NOCONTEXT */
+# define ENV_BUFSIZE 1000
WCHAR _varName[ENV_BUFSIZE];
WCHAR buff[ENV_BUFSIZE];
- int nNeeded;
+ int nNeeded, nNeeded2;
OBJ ret = nil;
- int i, l;
+ int i, len;
if (__isStringLike(aStringOrSymbol)) {
- l = __stringSize(aStringOrSymbol);
- if (l > ENV_BUFSIZE-1)
+ len = __stringSize(aStringOrSymbol);
+ if (len >= ENV_BUFSIZE)
goto badArgument;
- for (i=0; i<l; i++) {
+ for (i=0; i<len; i++) {
_varName[i] = __stringVal(aStringOrSymbol)[i];
}
} else if (__isUnicode16String(aStringOrSymbol)) {
- l = __unicode16StringSize(aStringOrSymbol);
- if (l > ENV_BUFSIZE-1)
+ len = __unicode16StringSize(aStringOrSymbol);
+ if (len >= ENV_BUFSIZE)
goto badArgument;
- for (i=0; i<l; i++) {
+ for (i=0; i<len; i++) {
_varName[i] = __unicode16StringVal(aStringOrSymbol)[i];
}
} else {
goto badArgument;
}
- _varName[l] = 0;
+ _varName[len] = 0;
nNeeded = GetEnvironmentVariableW(_varName, buff, ENV_BUFSIZE);
+console_printf("getenv() -> %d\n", nNeeded);
if (nNeeded > ENV_BUFSIZE) {
WCHAR *buff2;
buff2 = (WCHAR *)malloc(nNeeded+1 * sizeof(WCHAR));
- GetEnvironmentVariableW(_varName, buff2, nNeeded);
- ret = __mkStringOrU16String_maxlen(buff2, nNeeded);
+ nNeeded2 = GetEnvironmentVariableW(_varName, buff2, nNeeded);
+console_printf("getenv again -> %d\n", nNeeded2);
+ ret = __mkStringOrU16String_maxlen(buff2, nNeeded2);
free(buff2);
} else if (nNeeded > 0) {
ret = __mkStringOrU16String_maxlen(buff, nNeeded);