-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathwriter.go
61 lines (51 loc) · 1.01 KB
/
writer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package mailx
import "io"
// @author valor.
// According to
// 1. RFC 2045, 6.7. (page 21) for quoted-printable
// 2. RFC 2045, 6.8. (page 25) for base64
//
// The encoded output stream must be represented in lines
// with no more than 76 characters per line.
const maxLineLength = 76
type multipartBase64Writer struct {
w io.Writer
}
// Write implements io.Writer
func (w *multipartBase64Writer) Write(p []byte) (int, error) {
length := len(p)
if length <= maxLineLength {
return w.write(p)
}
sum := 0
doit := true
index := 0
for doit {
if index >= length {
break
}
end := index + maxLineLength
if end >= length {
end = length
doit = false
}
n, err := w.write(p[index:end])
if err != nil {
return 0, err
}
sum += n
index += maxLineLength
}
return sum, nil
}
func (w *multipartBase64Writer) write(p []byte) (int, error) {
n, err := w.w.Write(p)
if err != nil {
return 0, err
}
x, err := w.w.Write([]byte("\r\n"))
if err != nil {
return 0, err
}
return n + x, nil
}