Source file
src/net/http/clone.go
1
2
3
4
5 package http
6
7 import (
8 "mime/multipart"
9 "net/textproto"
10 "net/url"
11 )
12
13 func cloneURLValues(v url.Values) url.Values {
14 if v == nil {
15 return nil
16 }
17
18
19 return url.Values(Header(v).Clone())
20 }
21
22 func cloneURL(u *url.URL) *url.URL {
23 if u == nil {
24 return nil
25 }
26 u2 := new(url.URL)
27 *u2 = *u
28 if u.User != nil {
29 u2.User = new(url.Userinfo)
30 *u2.User = *u.User
31 }
32 return u2
33 }
34
35 func cloneMultipartForm(f *multipart.Form) *multipart.Form {
36 if f == nil {
37 return nil
38 }
39 f2 := &multipart.Form{
40 Value: (map[string][]string)(Header(f.Value).Clone()),
41 }
42 if f.File != nil {
43 m := make(map[string][]*multipart.FileHeader)
44 for k, vv := range f.File {
45 vv2 := make([]*multipart.FileHeader, len(vv))
46 for i, v := range vv {
47 vv2[i] = cloneMultipartFileHeader(v)
48 }
49 m[k] = vv2
50 }
51 f2.File = m
52 }
53 return f2
54 }
55
56 func cloneMultipartFileHeader(fh *multipart.FileHeader) *multipart.FileHeader {
57 if fh == nil {
58 return nil
59 }
60 fh2 := new(multipart.FileHeader)
61 *fh2 = *fh
62 fh2.Header = textproto.MIMEHeader(Header(fh.Header).Clone())
63 return fh2
64 }
65
66
67
68 func cloneOrMakeHeader(hdr Header) Header {
69 clone := hdr.Clone()
70 if clone == nil {
71 clone = make(Header)
72 }
73 return clone
74 }
75
View as plain text