summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stream/stream_file.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/stream/stream_file.c b/stream/stream_file.c
index 6e69f33c94..9f83b73dd1 100644
--- a/stream/stream_file.c
+++ b/stream/stream_file.c
@@ -77,9 +77,14 @@ static int64_t get_size(stream_t *s)
{
struct priv *p = s->priv;
if (p->cached_size == -2) {
- off_t size = lseek(p->fd, 0, SEEK_END);
- lseek(p->fd, s->pos, SEEK_SET);
- p->cached_size = size < 0 ? -1 : size;
+ int64_t size = -1;
+ struct stat st;
+ if (fstat(p->fd, &st) == 0) {
+ if (st.st_size <= 0 && !s->seekable)
+ st.st_size = -1;
+ size = st.st_size < 0 ? -1 : st.st_size;
+ }
+ p->cached_size = size;
}
return p->cached_size;
}