]> Cypherpunks repositories - gostls13.git/commitdiff
os: preserve "=C:" like env variables in env block on windows and bug fix in Clearenv()
authorAlex Brainman <alex.brainman@gmail.com>
Tue, 17 Aug 2010 01:38:26 +0000 (11:38 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Tue, 17 Aug 2010 01:38:26 +0000 (11:38 +1000)
R=rsc
CC=golang-dev
https://golang.org/cl/1995043

src/pkg/os/env_windows.go

index 4b224d5a0bdd01e6098f71b574178fd65101210f..557f5c03b89aa86c3cca38689cb8dc75ab3fe622 100644 (file)
@@ -60,9 +60,13 @@ func Setenv(key, value string) Error {
 // Clearenv deletes all environment variables.
 func Clearenv() {
        for _, s := range Environ() {
-               for j := 0; j < len(s); j++ {
+               // Environment variables can begin with =
+               // so start looking for the separator = at j=1.
+               // http://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx
+               for j := 1; j < len(s); j++ {
                        if s[j] == '=' {
                                Setenv(s[0:j], "")
+                               break
                        }
                }
        }
@@ -83,18 +87,15 @@ func Environ() []string {
                        if i <= from {
                                break
                        }
-                       // skip anything that starts with '='
-                       if p[from] != '=' {
-                               if len(r) == cap(r) {
-                                       nr := make([]string, len(r), 2*len(r))
-                                       for k := 0; k < len(r); k++ {
-                                               nr[k] = r[k]
-                                       }
-                                       r = nr
+                       if len(r) == cap(r) {
+                               nr := make([]string, len(r), 2*len(r))
+                               for k := 0; k < len(r); k++ {
+                                       nr[k] = r[k]
                                }
-                               r = r[0 : len(r)+1]
-                               r[len(r)-1] = string(utf16.Decode(p[from:i]))
+                               r = nr
                        }
+                       r = r[0 : len(r)+1]
+                       r[len(r)-1] = string(utf16.Decode(p[from:i]))
                        from = i + 1
                }
        }