diff options
Diffstat (limited to 'libgo/go/net/http/header.go')
-rw-r--r-- | libgo/go/net/http/header.go | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/libgo/go/net/http/header.go b/libgo/go/net/http/header.go index b699e7ef8ff..1e1ed981ecc 100644 --- a/libgo/go/net/http/header.go +++ b/libgo/go/net/http/header.go @@ -78,12 +78,19 @@ func (h Header) write(w io.Writer, trace *httptrace.ClientTrace) error { return h.writeSubset(w, nil, trace) } -func (h Header) clone() Header { +// Clone returns a copy of h. +func (h Header) Clone() Header { + // Find total number of values. + nv := 0 + for _, vv := range h { + nv += len(vv) + } + sv := make([]string, nv) // shared backing array for headers' values h2 := make(Header, len(h)) for k, vv := range h { - vv2 := make([]string, len(vv)) - copy(vv2, vv) - h2[k] = vv2 + n := copy(sv, vv) + h2[k] = sv[:n:n] + sv = sv[n:] } return h2 } |