From: Robert Griesemer Date: Mon, 8 Nov 2010 23:13:35 +0000 (-0800) Subject: os.Expand: don't call append for each non-variable char X-Git-Tag: weekly.2010-11-10~11 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9f19392f1ab275ad97454477a64ed1a016edc30f;p=gostls13.git os.Expand: don't call append for each non-variable char R=r CC=golang-dev https://golang.org/cl/2993041 --- diff --git a/src/pkg/os/env.go b/src/pkg/os/env.go index 9783674a7f..3a6d79dd09 100644 --- a/src/pkg/os/env.go +++ b/src/pkg/os/env.go @@ -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