static int64_t subfile_seek(URLContext *h, int64_t pos, int whence)
{
SubfileContext *c = h->priv_data;
- int64_t new_pos = -1;
+ int64_t new_pos, end;
int ret;
+ if (whence == AVSEEK_SIZE || whence == SEEK_END) {
+ end = c->end;
+ if (end == INT64_MAX && (end = ffurl_seek(c->h, 0, AVSEEK_SIZE)) < 0)
+ return end;
+ }
+
if (whence == AVSEEK_SIZE)
- return c->end - c->start;
+ return end - c->start;
switch (whence) {
case SEEK_SET:
new_pos = c->start + pos;
break;
case SEEK_CUR:
- new_pos += pos;
+ new_pos = c->pos + pos;
break;
case SEEK_END:
- new_pos = c->end + c->pos;
+ new_pos = end + pos;
break;
}
if (new_pos < c->start)