mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
avformat/aviobuf: Also return truncated buffer in avio_get_dyn_buf()
Two kinds of errors can happen when working with dynamic buffers: (Re)allocation errors or truncation errors (one has to truncate the buffer to a size of INT_MAX because avio_close_dyn_buf() and avio_get_dyn_buf() both return an int). Right now, avio_get_dyn_buf() returns an empty buffer in either case. But given that avio_get_dyn_buf() does not destroy the dynamic buffer, one can return the buffer in case of truncation and let the user check the error flags and decide for himself instead of hardcoding a single way to proceed in case of truncation. (This actually restores the behaviour from before commit 163bb9ac0af495a5cb95441bdb5c02170440d28c.) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
7be9b0bb38
commit
c33e56c7a6
@ -1382,13 +1382,13 @@ int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
|
|||||||
{
|
{
|
||||||
DynBuffer *d;
|
DynBuffer *d;
|
||||||
|
|
||||||
if (!s || s->error) {
|
if (!s) {
|
||||||
*pbuffer = NULL;
|
*pbuffer = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
d = s->opaque;
|
d = s->opaque;
|
||||||
|
|
||||||
if (!d->size) {
|
if (!s->error && !d->size) {
|
||||||
*pbuffer = d->io_buffer;
|
*pbuffer = d->io_buffer;
|
||||||
return FFMAX(s->buf_ptr, s->buf_ptr_max) - s->buffer;
|
return FFMAX(s->buf_ptr, s->buf_ptr_max) - s->buffer;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user