Fix misbehaviour in url_fseek() when seeking fails.

The return value of the seek function is -1 on error, not -EPIPE (the return value in url_seek() if no seek function pointer is set)
Patch by Ronald S. Bultje % rbultje A ronald P bitfreak P net %
Original thread:
date: Dec 31, 2006 9:25 PM
subject: [Ffmpeg-devel] Re: [PATCH] file length handling

Originally committed as revision 7766 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Ronald S. Bultje 18 years ago committed by Guillaume Poirier
parent eabbae730c
commit 68fcdbf1e5
  1. 6
      libavformat/aviobuf.c

@ -136,6 +136,8 @@ offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence)
fill_buffer(s); fill_buffer(s);
s->buf_ptr = s->buf_end + offset - s->pos; s->buf_ptr = s->buf_end + offset - s->pos;
} else { } else {
offset_t res = -EPIPE;
#if defined(CONFIG_MUXERS) || defined(CONFIG_NETWORK) #if defined(CONFIG_MUXERS) || defined(CONFIG_NETWORK)
if (s->write_flag) { if (s->write_flag) {
flush_buffer(s); flush_buffer(s);
@ -146,8 +148,8 @@ offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence)
s->buf_end = s->buffer; s->buf_end = s->buffer;
} }
s->buf_ptr = s->buffer; s->buf_ptr = s->buffer;
if (!s->seek || s->seek(s->opaque, offset, SEEK_SET) == (offset_t)-EPIPE) if (!s->seek || (res = s->seek(s->opaque, offset, SEEK_SET)) < 0)
return -EPIPE; return res;
s->pos = offset; s->pos = offset;
} }
s->eof_reached = 0; s->eof_reached = 0;

Loading…
Cancel
Save