Win32OperatingSystem.st
changeset 22112 9e8e22f501f9
parent 22111 66d61db0d982
child 22113 6f98aace1553
--- 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);