]> Cypherpunks repositories - gostls13.git/commitdiff
os.Expand: don't call append for each non-variable char
authorRobert Griesemer <gri@golang.org>
Mon, 8 Nov 2010 23:13:35 +0000 (15:13 -0800)
committerRobert Griesemer <gri@golang.org>
Mon, 8 Nov 2010 23:13:35 +0000 (15:13 -0800)
R=r
CC=golang-dev
https://golang.org/cl/2993041

src/pkg/os/env.go

index 9783674a7fe08fac72d0694de9a6c0c370355b9f..3a6d79dd09589223aa92d9c8103933ad8191ce09 100644 (file)
@@ -11,17 +11,17 @@ package os
 func Expand(s string, mapping func(string) string) string {
        buf := make([]byte, 0, 2*len(s))
        // ${} is all ASCII, so bytes are fine for this operation.
-       for i := 0; i < len(s); {
-               if s[i] != '$' || i == len(s)-1 {
-                       buf = append(buf, s[i])
-                       i++
-                       continue
+       i := 0
+       for j := 0; j < len(s); j++ {
+               if s[j] == '$' && j+1 < len(s) {
+                       buf = append(buf, []byte(s[i:j])...)
+                       name, w := getShellName(s[j+1:])
+                       buf = append(buf, []byte(mapping(name))...)
+                       j += w
+                       i = j + 1
                }
-               name, w := getShellName(s[i+1:])
-               buf = append(buf, []byte(mapping(name))...)
-               i += 1 + w
        }
-       return string(buf)
+       return string(buf) + s[i:]
 }
 
 // ShellExpand replaces ${var} or $var in the string according to the values