bytes: make Join return a new buffer on len(a) == 1

Fixes #3844.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6432054
This commit is contained in:
Gustavo Niemeyer 2012-07-20 16:04:22 -03:00
parent 7bf8355dc7
commit c0efcac6a9
2 changed files with 11 additions and 6 deletions

View file

@ -333,14 +333,15 @@ func FieldsFunc(s []byte, f func(rune) bool) [][]byte {
return a[0:na]
}
// Join concatenates the elements of a to create a single byte array. The separator
// Join concatenates the elements of a to create a new byte array. The separator
// sep is placed between elements in the resulting array.
func Join(a [][]byte, sep []byte) []byte {
if len(a) == 0 {
return []byte{}
}
if len(a) == 1 {
return a[0]
// Just return a copy.
return append([]byte(nil), a[0]...)
}
n := len(sep) * (len(a) - 1)
for i := 0; i < len(a); i++ {
@ -619,10 +620,8 @@ func Replace(s, old, new []byte, n int) []byte {
m = Count(s, old)
}
if m == 0 {
// Nothing to do. Just copy.
t := make([]byte, len(s))
copy(t, s)
return t
// Just return a copy.
return append([]byte(nil), s...)
}
if n < 0 || m < n {
n = m