copyLinesFrom writes lines starting from line off in src to dst stopping at the end of src or at the first error. copyLinesFrom returns the number of lines written and any error.
(dst io.Writer, src LineReaderAt, off int64)
| 188 | // the end of src or at the first error. copyLinesFrom returns the number of |
| 189 | // lines written and any error. |
| 190 | func copyLinesFrom(dst io.Writer, src LineReaderAt, off int64) (written int64, err error) { |
| 191 | buf := make([][]byte, lineBufferSize) |
| 192 | ReadLoop: |
| 193 | for { |
| 194 | nr, rerr := src.ReadLinesAt(buf, off) |
| 195 | if nr > 0 { |
| 196 | for _, line := range buf[0:nr] { |
| 197 | nw, werr := dst.Write(line) |
| 198 | if nw > 0 { |
| 199 | written++ |
| 200 | } |
| 201 | if werr != nil { |
| 202 | err = werr |
| 203 | break ReadLoop |
| 204 | } |
| 205 | if len(line) != nw { |
| 206 | err = io.ErrShortWrite |
| 207 | break ReadLoop |
| 208 | } |
| 209 | } |
| 210 | off += int64(nr) |
| 211 | } |
| 212 | if rerr != nil { |
| 213 | if rerr != io.EOF { |
| 214 | err = rerr |
| 215 | } |
| 216 | break |
| 217 | } |
| 218 | } |
| 219 | return written, err |
| 220 | } |