WriteFromReaderAndLimitedReader is the same as WriteFromReader, but optimized to avoid allocations if a LimitedReader is passed in. This function clobbers the values of lr.
(r io.Reader, count int64, lr *io.LimitedReader)
| 503 | // |
| 504 | // This function clobbers the values of lr. |
| 505 | func (b *Buffer) WriteFromReaderAndLimitedReader(r io.Reader, count int64, lr *io.LimitedReader) (int64, error) { |
| 506 | if lr == nil { |
| 507 | lr = &io.LimitedReader{} |
| 508 | } |
| 509 | |
| 510 | var done int64 |
| 511 | for done < count { |
| 512 | vsize := count - done |
| 513 | if vsize > MaxChunkSize { |
| 514 | vsize = MaxChunkSize |
| 515 | } |
| 516 | v := NewView(int(vsize)) |
| 517 | lr.R = r |
| 518 | lr.N = vsize |
| 519 | n, err := io.Copy(v, lr) |
| 520 | b.Append(v) |
| 521 | done += n |
| 522 | if err == io.EOF { |
| 523 | break |
| 524 | } |
| 525 | if err != nil { |
| 526 | return done, err |
| 527 | } |
| 528 | } |
| 529 | return done, nil |
| 530 | } |
| 531 | |
| 532 | // ReadToWriter reads from the buffer into an io.Writer. |
| 533 | // |
no test coverage detected