...
1
16
17 package crlf
18
19 import (
20 "bytes"
21 "io"
22 )
23
24 type crlfWriter struct {
25 io.Writer
26 }
27
28
29
30 func NewCRLFWriter(w io.Writer) io.Writer {
31 return crlfWriter{w}
32 }
33
34 func (w crlfWriter) Write(b []byte) (n int, err error) {
35 for i, written := 0, 0; ; {
36 next := bytes.Index(b[i:], []byte("\n"))
37 if next == -1 {
38 n, err := w.Writer.Write(b[i:])
39 return written + n, err
40 }
41 next = next + i
42 n, err := w.Writer.Write(b[i:next])
43 if err != nil {
44 return written + n, err
45 }
46 written += n
47 n, err = w.Writer.Write([]byte("\r\n"))
48 if err != nil {
49 if n > 1 {
50 n = 1
51 }
52 return written + n, err
53 }
54 written++
55 i = next + 1
56 }
57 }
58
View as plain text