From 07b93dcf8084bcae92fa1f33652723ca9c990db2 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 22 May 2014 10:10:16 +0200 Subject: InputStream: make Seek() always absolute Remove the "whence" parameter that is not actually necessary, and only complicates the InputStream implementations. --- src/decoder/plugins/SndfileDecoderPlugin.cxx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/decoder/plugins/SndfileDecoderPlugin.cxx') diff --git a/src/decoder/plugins/SndfileDecoderPlugin.cxx b/src/decoder/plugins/SndfileDecoderPlugin.cxx index 6d9e0d31e..cf3aa61d5 100644 --- a/src/decoder/plugins/SndfileDecoderPlugin.cxx +++ b/src/decoder/plugins/SndfileDecoderPlugin.cxx @@ -41,11 +41,31 @@ sndfile_vio_get_filelen(void *user_data) } static sf_count_t -sndfile_vio_seek(sf_count_t offset, int whence, void *user_data) +sndfile_vio_seek(sf_count_t _offset, int whence, void *user_data) { InputStream &is = *(InputStream *)user_data; - if (!is.LockSeek(offset, whence, IgnoreError())) + InputStream::offset_type offset = _offset; + switch (whence) { + case SEEK_SET: + break; + + case SEEK_CUR: + offset += is.GetOffset(); + break; + + case SEEK_END: + if (!is.KnownSize()) + return -1; + + offset += is.GetSize(); + break; + + default: + return -1; + } + + if (!is.LockSeek(offset, IgnoreError())) return -1; return is.GetOffset(); -- cgit v1.2.3