static void flush_buffer(AVIOContext *s)
{
- if (s->buf_ptr > s->buffer) {
+ if (s->write_flag && s->buf_ptr > s->buffer) {
writeout(s, s->buffer, s->buf_ptr - s->buffer);
if (s->update_checksum) {
s->checksum = s->update_checksum(s->checksum, s->checksum_ptr,
}
}
s->buf_ptr = s->buffer;
+ if (!s->write_flag)
+ s->buf_end = s->buffer;
}
void avio_w8(AVIOContext *s, int b)
if (c && i < maxlen-1)
buf[i++] = c;
} while (c != '\n' && c != '\r' && c);
- if (c == '\r' && avio_r8(s) != '\n')
+ if (c == '\r' && avio_r8(s) != '\n' && !avio_feof(s))
avio_skip(s, -1);
buf[i] = 0;
*pbuffer = NULL;
return 0;
}
- d = s->opaque;
/* don't attempt to pad fixed-size packet buffers */
if (!s->max_packet_size) {
avio_flush(s);
+ d = s->opaque;
*pbuffer = d->buffer;
size = d->size;
av_free(d);