aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/decoder/OggFind.cxx15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/decoder/OggFind.cxx b/src/decoder/OggFind.cxx
index 297d925e7..e737a3ffe 100644
--- a/src/decoder/OggFind.cxx
+++ b/src/decoder/OggFind.cxx
@@ -38,6 +38,16 @@ OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet)
}
}
+static bool
+OggSeekPageAtOffset(OggSyncState &oy, ogg_stream_state &os, InputStream &is,
+ InputStream::offset_type offset, int whence)
+{
+ oy.Reset();
+
+ return is.LockSeek(offset, whence, IgnoreError()) &&
+ oy.ExpectPageSeekIn(os);
+}
+
bool
OggSeekFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet,
InputStream &is)
@@ -48,9 +58,6 @@ OggSeekFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet,
if (!is.CheapSeeking())
return false;
- oy.Reset();
-
- return is.LockSeek(-65536, SEEK_END, IgnoreError()) &&
- oy.ExpectPageSeekIn(os) &&
+ return OggSeekPageAtOffset(oy, os, is, -65536, SEEK_END) &&
OggFindEOS(oy, os, packet);
}