Archived
1
0
This repository has been archived on 2023-08-12. You can view files and clone it, but cannot push or open issues or pull requests.
nntpchan/contrib/backends/srndv2/src/srnd/line.go

41 lines
686 B
Go
Raw Normal View History

package srnd
import (
"bytes"
"io"
)
type LineWriter struct {
2017-11-07 05:09:45 +05:00
w io.Writer
limit int
}
2017-11-07 05:09:45 +05:00
func NewLineWriter(w io.Writer, limit int) *LineWriter {
return &LineWriter{
2017-11-07 05:09:45 +05:00
w: w,
limit: limit,
}
}
func (l *LineWriter) Write(data []byte) (n int, err error) {
2017-11-07 05:09:45 +05:00
dl := len(data)
data = bytes.Replace(data, []byte{13, 10}, []byte{10}, -1)
2017-11-07 05:09:45 +05:00
parts := bytes.Split(data, []byte{10})
for _, part := range parts {
for len(part) > l.limit {
d := make([]byte, l.limit)
copy(d, part[:l.limit])
d = append(d, 10)
_, err = l.w.Write(d)
part = part[l.limit:]
if err != nil {
return
}
}
part = append(part, 10)
_, err = l.w.Write(part)
2017-04-04 20:04:14 +05:00
}
2017-11-07 05:09:45 +05:00
n = dl
return
}