| 204 | } |
| 205 | |
| 206 | void avio_write(AVIOContext *s, const unsigned char *buf, int size) |
| 207 | { |
| 208 | if (size <= 0) |
| 209 | return; |
| 210 | if (s->direct && !s->update_checksum) { |
| 211 | avio_flush(s); |
| 212 | writeout(s, buf, size); |
| 213 | return; |
| 214 | } |
| 215 | do { |
| 216 | int len = FFMIN(s->buf_end - s->buf_ptr, size); |
| 217 | memcpy(s->buf_ptr, buf, len); |
| 218 | s->buf_ptr += len; |
| 219 | |
| 220 | if (s->buf_ptr >= s->buf_end) |
| 221 | flush_buffer(s); |
| 222 | |
| 223 | buf += len; |
| 224 | size -= len; |
| 225 | } while (size > 0); |
| 226 | } |
| 227 | |
| 228 | void avio_flush(AVIOContext *s) |
| 229 | { |