| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package parser
- import (
- "io"
- )
- type limitReader struct {
- io.Reader
- remain int
- }
- func newLimitReader(r io.Reader, limit int) *limitReader {
- return &limitReader{
- Reader: r,
- remain: limit,
- }
- }
- func (r *limitReader) Read(b []byte) (int, error) {
- if r.remain == 0 {
- return 0, io.EOF
- }
- if len(b) > r.remain {
- b = b[:r.remain]
- }
- n, err := r.Reader.Read(b)
- r.remain -= n
- return n, err
- }
- func (r *limitReader) Close() error {
- if r.remain > 0 {
- b := make([]byte, 10240)
- for {
- _, err := r.Read(b)
- if err == io.EOF {
- break
- }
- if err != nil {
- return err
- }
- }
- }
- return nil
- }
|