mirror of
https://github.com/xtaci/kcptun.git
synced 2024-04-21 12:32:32 +00:00
37 lines
663 B
Go
37 lines
663 B
Go
package generic
|
|
|
|
import "io"
|
|
|
|
// io.CopyBuffer has extra tests for interface like io.ReaderFrom and io.WriterTo
|
|
// which is not efficient in memory management from tests
|
|
func CopyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) {
|
|
if buf != nil && len(buf) == 0 {
|
|
panic("empty buffer in copyBuffer")
|
|
}
|
|
|
|
for {
|
|
nr, er := src.Read(buf)
|
|
if nr > 0 {
|
|
nw, ew := dst.Write(buf[0:nr])
|
|
if nw > 0 {
|
|
written += int64(nw)
|
|
}
|
|
if ew != nil {
|
|
err = ew
|
|
break
|
|
}
|
|
if nr != nw {
|
|
err = io.ErrShortWrite
|
|
break
|
|
}
|
|
}
|
|
if er != nil {
|
|
if er != io.EOF {
|
|
err = er
|
|
}
|
|
break
|
|
}
|
|
}
|
|
return written, err
|
|
}
|