| 222 | } |
| 223 | |
| 224 | func (x *xerialWriter) Write(b []byte) (int, error) { |
| 225 | wn := 0 |
| 226 | |
| 227 | if cap(x.input) == 0 { |
| 228 | x.input = make([]byte, 0, defaultBufferSize) |
| 229 | } |
| 230 | |
| 231 | for len(b) > 0 { |
| 232 | if x.full() { |
| 233 | x.grow() |
| 234 | } |
| 235 | |
| 236 | n := copy(x.input[len(x.input):cap(x.input)], b) |
| 237 | b = b[n:] |
| 238 | wn += n |
| 239 | x.input = x.input[:len(x.input)+n] |
| 240 | |
| 241 | if x.fullEnough() { |
| 242 | if err := x.Flush(); err != nil { |
| 243 | return wn, err |
| 244 | } |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | return wn, nil |
| 249 | } |
| 250 | |
| 251 | func (x *xerialWriter) Flush() error { |
| 252 | if len(x.input) == 0 { |