diff options
author | Max Kellermann <max@duempel.org> | 2014-05-22 10:10:16 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-05-22 13:52:00 +0200 |
commit | 07b93dcf8084bcae92fa1f33652723ca9c990db2 (patch) | |
tree | 5cfa3d13c14d68b70d54ade24169b84a7f614b8e /src | |
parent | 374c6a27db790eb637feaeb9bd27ed82897d7953 (diff) | |
download | mpd-07b93dcf8084bcae92fa1f33652723ca9c990db2.tar.gz mpd-07b93dcf8084bcae92fa1f33652723ca9c990db2.tar.xz mpd-07b93dcf8084bcae92fa1f33652723ca9c990db2.zip |
InputStream: make Seek() always absolute
Remove the "whence" parameter that is not actually necessary, and only
complicates the InputStream implementations.
Diffstat (limited to 'src')
27 files changed, 181 insertions, 124 deletions
diff --git a/src/archive/plugins/ZzipArchivePlugin.cxx b/src/archive/plugins/ZzipArchivePlugin.cxx index 436ebc793..396055c71 100644 --- a/src/archive/plugins/ZzipArchivePlugin.cxx +++ b/src/archive/plugins/ZzipArchivePlugin.cxx @@ -125,7 +125,7 @@ struct ZzipInputStream final : public InputStream { /* virtual methods from InputStream */ bool IsEOF() override; size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; InputStream * @@ -165,9 +165,9 @@ ZzipInputStream::IsEOF() } bool -ZzipInputStream::Seek(offset_type new_offset, int whence, Error &error) +ZzipInputStream::Seek(offset_type new_offset, Error &error) { - zzip_off_t ofs = zzip_seek(file, new_offset, whence); + zzip_off_t ofs = zzip_seek(file, new_offset, SEEK_SET); if (ofs != -1) { error.Set(zzip_domain, "zzip_seek() has failed"); offset = ofs; diff --git a/src/decoder/plugins/AudiofileDecoderPlugin.cxx b/src/decoder/plugins/AudiofileDecoderPlugin.cxx index 262c4a5bf..a3f0ee380 100644 --- a/src/decoder/plugins/AudiofileDecoderPlugin.cxx +++ b/src/decoder/plugins/AudiofileDecoderPlugin.cxx @@ -92,13 +92,17 @@ audiofile_file_destroy(AFvirtualfile *vfile) } static AFfileoffset -audiofile_file_seek(AFvirtualfile *vfile, AFfileoffset offset, int is_relative) +audiofile_file_seek(AFvirtualfile *vfile, AFfileoffset _offset, + int is_relative) { InputStream &is = *(InputStream *)vfile->closure; - int whence = (is_relative ? SEEK_CUR : SEEK_SET); + + InputStream::offset_type offset = _offset; + if (is_relative) + offset += is.GetOffset(); Error error; - if (is.LockSeek(offset, whence, error)) { + if (is.LockSeek(offset, IgnoreError())) { return is.GetOffset(); } else { return -1; diff --git a/src/decoder/plugins/DsdLib.cxx b/src/decoder/plugins/DsdLib.cxx index f77d8f59a..2bd532a05 100644 --- a/src/decoder/plugins/DsdLib.cxx +++ b/src/decoder/plugins/DsdLib.cxx @@ -30,9 +30,7 @@ #include "tag/TagId3.hxx" #include "util/Error.hxx" -#include <unistd.h> #include <string.h> -#include <stdio.h> /* for SEEK_SET, SEEK_CUR */ #ifdef HAVE_ID3TAG #include <id3tag.h> @@ -63,7 +61,7 @@ dsdlib_skip_to(Decoder *decoder, InputStream &is, int64_t offset) { if (is.IsSeekable()) - return is.Seek(offset, SEEK_SET, IgnoreError()); + return is.Seek(offset, IgnoreError()); if (is.GetOffset() > offset) return false; @@ -96,7 +94,7 @@ dsdlib_skip(Decoder *decoder, InputStream &is, return true; if (is.IsSeekable()) - return is.Seek(delta, SEEK_CUR, IgnoreError()); + return is.Seek(is.GetOffset() + delta, IgnoreError()); char buffer[8192]; while (delta > 0) { diff --git a/src/decoder/plugins/FaadDecoderPlugin.cxx b/src/decoder/plugins/FaadDecoderPlugin.cxx index e80665d24..c7f72da15 100644 --- a/src/decoder/plugins/FaadDecoderPlugin.cxx +++ b/src/decoder/plugins/FaadDecoderPlugin.cxx @@ -186,7 +186,7 @@ faad_song_duration(DecoderBuffer *buffer, InputStream &is) /* obtain the duration from the ADTS header */ float song_length = adts_song_duration(buffer); - is.LockSeek(tagsize, SEEK_SET, IgnoreError()); + is.LockSeek(tagsize, IgnoreError()); decoder_buffer_clear(buffer); decoder_buffer_fill(buffer); diff --git a/src/decoder/plugins/FfmpegDecoderPlugin.cxx b/src/decoder/plugins/FfmpegDecoderPlugin.cxx index 22a42477d..9139a622b 100644 --- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx +++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx @@ -120,10 +120,29 @@ mpd_ffmpeg_stream_seek(void *opaque, int64_t pos, int whence) { AvioStream *stream = (AvioStream *)opaque; - if (whence == AVSEEK_SIZE) + switch (whence) { + case SEEK_SET: + break; + + case SEEK_CUR: + pos += stream->input.GetOffset(); + break; + + case SEEK_END: + if (!stream->input.KnownSize()) + return -1; + + pos += stream->input.GetSize(); + break; + + case AVSEEK_SIZE: return stream->input.GetSize(); - if (!stream->input.LockSeek(pos, whence, IgnoreError())) + default: + return -1; + } + + if (!stream->input.LockSeek(pos, IgnoreError())) return -1; return stream->input.GetOffset(); diff --git a/src/decoder/plugins/FlacIOHandle.cxx b/src/decoder/plugins/FlacIOHandle.cxx index 6444e02cf..b5f9f5ec0 100644 --- a/src/decoder/plugins/FlacIOHandle.cxx +++ b/src/decoder/plugins/FlacIOHandle.cxx @@ -62,12 +62,31 @@ FlacIORead(void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle) } static int -FlacIOSeek(FLAC__IOHandle handle, FLAC__int64 offset, int whence) +FlacIOSeek(FLAC__IOHandle handle, FLAC__int64 _offset, int whence) { InputStream *is = (InputStream *)handle; - Error error; - return is->LockSeek(offset, whence, error) ? 0 : -1; + 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; + } + + return is->LockSeek(offset, IgnoreError()) ? 0 : -1; } static FLAC__int64 diff --git a/src/decoder/plugins/FlacInput.cxx b/src/decoder/plugins/FlacInput.cxx index d7fc72025..5b4c3104d 100644 --- a/src/decoder/plugins/FlacInput.cxx +++ b/src/decoder/plugins/FlacInput.cxx @@ -51,7 +51,7 @@ FlacInput::Seek(FLAC__uint64 absolute_byte_offset) return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED; ::Error error; - if (!input_stream.LockSeek(absolute_byte_offset, SEEK_SET, error)) { + if (!input_stream.LockSeek(absolute_byte_offset, error)) { LogError(error); return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR; } diff --git a/src/decoder/plugins/MadDecoderPlugin.cxx b/src/decoder/plugins/MadDecoderPlugin.cxx index ffd63a2ac..886aa1795 100644 --- a/src/decoder/plugins/MadDecoderPlugin.cxx +++ b/src/decoder/plugins/MadDecoderPlugin.cxx @@ -208,7 +208,7 @@ inline bool MadDecoder::Seek(long offset) { Error error; - if (!input_stream.LockSeek(offset, SEEK_SET, error)) + if (!input_stream.LockSeek(offset, error)) return false; mad_stream_buffer(&stream, input_buffer, 0); diff --git a/src/decoder/plugins/MpcdecDecoderPlugin.cxx b/src/decoder/plugins/MpcdecDecoderPlugin.cxx index 18f6e7673..f86cb3c81 100644 --- a/src/decoder/plugins/MpcdecDecoderPlugin.cxx +++ b/src/decoder/plugins/MpcdecDecoderPlugin.cxx @@ -57,7 +57,7 @@ mpc_seek_cb(mpc_reader *reader, mpc_int32_t offset) struct mpc_decoder_data *data = (struct mpc_decoder_data *)reader->data; - return data->is.LockSeek(offset, SEEK_SET, IgnoreError()); + return data->is.LockSeek(offset, IgnoreError()); } static mpc_int32_t diff --git a/src/decoder/plugins/OggFind.cxx b/src/decoder/plugins/OggFind.cxx index d7a3dc04a..15e9c5c92 100644 --- a/src/decoder/plugins/OggFind.cxx +++ b/src/decoder/plugins/OggFind.cxx @@ -22,8 +22,6 @@ #include "OggSyncState.hxx" #include "util/Error.hxx" -#include <stdio.h> - bool OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet) { @@ -41,7 +39,7 @@ OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet) bool OggSeekPageAtOffset(OggSyncState &oy, ogg_stream_state &os, InputStream &is, - InputStream::offset_type offset, int whence) + InputStream::offset_type offset) { oy.Reset(); @@ -49,7 +47,7 @@ OggSeekPageAtOffset(OggSyncState &oy, ogg_stream_state &os, InputStream &is, data */ ogg_stream_reset(&os); - return is.LockSeek(offset, whence, IgnoreError()) && + return is.LockSeek(offset, IgnoreError()) && oy.ExpectPageSeekIn(os); } @@ -57,12 +55,15 @@ bool OggSeekFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet, InputStream &is) { - if (is.KnownSize() && is.GetRest() < 65536) + if (!is.KnownSize()) + return false; + + if (is.GetRest() < 65536) return OggFindEOS(oy, os, packet); if (!is.CheapSeeking()) return false; - return OggSeekPageAtOffset(oy, os, is, -65536, SEEK_END) && + return OggSeekPageAtOffset(oy, os, is, is.GetSize() - 65536) && OggFindEOS(oy, os, packet); } diff --git a/src/decoder/plugins/OggFind.hxx b/src/decoder/plugins/OggFind.hxx index d93b87505..8ced7fd86 100644 --- a/src/decoder/plugins/OggFind.hxx +++ b/src/decoder/plugins/OggFind.hxx @@ -41,7 +41,7 @@ OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet); */ bool OggSeekPageAtOffset(OggSyncState &oy, ogg_stream_state &os, InputStream &is, - InputStream::offset_type offset, int whence); + InputStream::offset_type offset); /** * Try to find the end-of-stream (EOS) packet. Seek to the end of the diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx index 983d17278..27c559272 100644 --- a/src/decoder/plugins/OpusDecoderPlugin.cxx +++ b/src/decoder/plugins/OpusDecoderPlugin.cxx @@ -199,7 +199,7 @@ LoadEOSPacket(InputStream &is, Decoder *decoder, int serialno, ogg_stream_clear(&os); /* restore the previous file position */ - is.Seek(old_offset, SEEK_SET, IgnoreError()); + is.Seek(old_offset, IgnoreError()); return result; } @@ -344,7 +344,7 @@ MPDOpusDecoder::Seek(OggSyncState &oy, double where_s) InputStream::offset_type offset(where_granulepos * input_stream.GetSize() / eos_granulepos); - if (!OggSeekPageAtOffset(oy, os, input_stream, offset, SEEK_SET)) + if (!OggSeekPageAtOffset(oy, os, input_stream, offset)) return false; decoder_timestamp(decoder, where_s); diff --git a/src/decoder/plugins/PcmDecoderPlugin.cxx b/src/decoder/plugins/PcmDecoderPlugin.cxx index e7e593550..3b9c60691 100644 --- a/src/decoder/plugins/PcmDecoderPlugin.cxx +++ b/src/decoder/plugins/PcmDecoderPlugin.cxx @@ -26,7 +26,6 @@ #include "Log.hxx" #include <string.h> -#include <stdio.h> /* for SEEK_SET */ static void pcm_stream_decode(Decoder &decoder, InputStream &is) @@ -76,7 +75,7 @@ pcm_stream_decode(Decoder &decoder, InputStream &is) decoder_seek_where(decoder)); Error error; - if (is.LockSeek(offset, SEEK_SET, error)) { + if (is.LockSeek(offset, error)) { decoder_command_finished(decoder); } else { LogError(error); 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(); diff --git a/src/decoder/plugins/VorbisDecoderPlugin.cxx b/src/decoder/plugins/VorbisDecoderPlugin.cxx index 4fe44e9e8..72542e3a2 100644 --- a/src/decoder/plugins/VorbisDecoderPlugin.cxx +++ b/src/decoder/plugins/VorbisDecoderPlugin.cxx @@ -70,15 +70,37 @@ static size_t ogg_read_cb(void *ptr, size_t size, size_t nmemb, void *data) return ret / size; } -static int ogg_seek_cb(void *data, ogg_int64_t offset, int whence) +static int ogg_seek_cb(void *data, ogg_int64_t _offset, int whence) { VorbisInputStream *vis = (VorbisInputStream *)data; + InputStream &is = vis->input_stream; - Error error; - return vis->seekable && - (vis->decoder == nullptr || - decoder_get_command(*vis->decoder) != DecoderCommand::STOP) && - vis->input_stream.LockSeek(offset, whence, error) + if (!vis->seekable || + (vis->decoder != nullptr && + decoder_get_command(*vis->decoder) == DecoderCommand::STOP)) + return -1; + + 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; + } + + return is.LockSeek(offset, IgnoreError()) ? 0 : -1; } diff --git a/src/decoder/plugins/WavpackDecoderPlugin.cxx b/src/decoder/plugins/WavpackDecoderPlugin.cxx index 9d65775c1..2f60090c1 100644 --- a/src/decoder/plugins/WavpackDecoderPlugin.cxx +++ b/src/decoder/plugins/WavpackDecoderPlugin.cxx @@ -392,13 +392,35 @@ wavpack_input_get_pos(void *id) static int wavpack_input_set_pos_abs(void *id, uint32_t pos) { - return wpin(id)->is.LockSeek(pos, SEEK_SET, IgnoreError()) ? 0 : -1; + return wpin(id)->is.LockSeek(pos, IgnoreError()) ? 0 : -1; } static int wavpack_input_set_pos_rel(void *id, int32_t delta, int mode) { - return wpin(id)->is.LockSeek(delta, mode, IgnoreError()) ? 0 : -1; + InputStream &is = wpin(id)->is; + + InputStream::offset_type offset = delta; + switch (mode) { + 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; + } + + return is.LockSeek(offset, IgnoreError()) ? 0 : -1; } static int diff --git a/src/input/InputStream.cxx b/src/input/InputStream.cxx index e7307540d..657b9df09 100644 --- a/src/input/InputStream.cxx +++ b/src/input/InputStream.cxx @@ -23,7 +23,6 @@ #include "util/UriUtil.hxx" #include <assert.h> -#include <stdio.h> /* for SEEK_SET */ InputStream::~InputStream() { @@ -75,29 +74,17 @@ InputStream::CheapSeeking() const } bool -InputStream::Seek(gcc_unused offset_type new_offset, gcc_unused int whence, +InputStream::Seek(gcc_unused offset_type new_offset, gcc_unused Error &error) { return false; } bool -InputStream::LockSeek(offset_type _offset, int whence, Error &error) +InputStream::LockSeek(offset_type _offset, Error &error) { const ScopeLock protect(mutex); - return Seek(_offset, whence, error); -} - -bool -InputStream::Rewind(Error &error) -{ - return Seek(0, SEEK_SET, error); -} - -bool -InputStream::LockRewind(Error &error) -{ - return LockSeek(0, SEEK_SET, error); + return Seek(_offset, error); } Tag * diff --git a/src/input/InputStream.hxx b/src/input/InputStream.hxx index 5f754940b..25e99de3d 100644 --- a/src/input/InputStream.hxx +++ b/src/input/InputStream.hxx @@ -275,22 +275,26 @@ public: * The caller must lock the mutex. * * @param offset the relative offset - * @param whence the base of the seek, one of SEEK_SET, SEEK_CUR, SEEK_END */ - virtual bool Seek(offset_type offset, int whence, Error &error); + virtual bool Seek(offset_type offset, Error &error); /** * Wrapper for Seek() which locks and unlocks the mutex; the * caller must not be holding it already. */ - bool LockSeek(offset_type offset, int whence, Error &error); + bool LockSeek(offset_type offset, Error &error); /** * Rewind to the beginning of the stream. This is a wrapper - * for Seek(0, SEEK_SET, error). + * for Seek(0, error). */ - bool Rewind(Error &error); - bool LockRewind(Error &error); + bool Rewind(Error &error) { + return Seek(0, error); + } + + bool LockRewind(Error &error) { + return LockSeek(0, error); + } /** * Returns true if the stream has reached end-of-file. diff --git a/src/input/ProxyInputStream.cxx b/src/input/ProxyInputStream.cxx index 7b6e9f937..d65fb5df1 100644 --- a/src/input/ProxyInputStream.cxx +++ b/src/input/ProxyInputStream.cxx @@ -63,9 +63,9 @@ ProxyInputStream::Update() } bool -ProxyInputStream::Seek(offset_type new_offset, int whence, Error &error) +ProxyInputStream::Seek(offset_type new_offset, Error &error) { - bool success = input.Seek(new_offset, whence, error); + bool success = input.Seek(new_offset, error); CopyAttributes(); return success; } diff --git a/src/input/ProxyInputStream.hxx b/src/input/ProxyInputStream.hxx index b2049fbc0..727ae5917 100644 --- a/src/input/ProxyInputStream.hxx +++ b/src/input/ProxyInputStream.hxx @@ -45,7 +45,7 @@ public: /* virtual methods from InputStream */ bool Check(Error &error) override; void Update() override; - bool Seek(offset_type new_offset, int whence, Error &error) override; + bool Seek(offset_type new_offset, Error &error) override; bool IsEOF() override; Tag *ReadTag() override; bool IsAvailable() override; diff --git a/src/input/plugins/CdioParanoiaInputPlugin.cxx b/src/input/plugins/CdioParanoiaInputPlugin.cxx index 534084e0d..6f1ea976a 100644 --- a/src/input/plugins/CdioParanoiaInputPlugin.cxx +++ b/src/input/plugins/CdioParanoiaInputPlugin.cxx @@ -99,7 +99,7 @@ class CdioParanoiaInputStream final : public InputStream { /* virtual methods from InputStream */ bool IsEOF() override; size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; static constexpr Domain cdio_domain("cdio"); @@ -272,21 +272,8 @@ input_cdio_open(const char *uri, } bool -CdioParanoiaInputStream::Seek(InputPlugin::offset_type new_offset, - int whence, Error &error) +CdioParanoiaInputStream::Seek(offset_type new_offset, Error &error) { - /* calculate absolute offset */ - switch (whence) { - case SEEK_SET: - break; - case SEEK_CUR: - new_offset += offset; - break; - case SEEK_END: - new_offset += size; - break; - } - if (new_offset < 0 || new_offset > size) { error.Format(cdio_domain, "Invalid offset to seek %ld (%ld)", (long int)new_offset, (long int)size); diff --git a/src/input/plugins/CurlInputPlugin.cxx b/src/input/plugins/CurlInputPlugin.cxx index dc26e0aa2..e464a3ce0 100644 --- a/src/input/plugins/CurlInputPlugin.cxx +++ b/src/input/plugins/CurlInputPlugin.cxx @@ -175,7 +175,7 @@ struct CurlInputStream final : public InputStream { } size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; class CurlMulti; @@ -887,12 +887,11 @@ CurlInputStream::InitEasy(Error &error) } inline bool -CurlInputStream::Seek(InputPlugin::offset_type new_offset, int whence, - Error &error) +CurlInputStream::Seek(offset_type new_offset, Error &error) { assert(IsReady()); - if (whence == SEEK_SET && new_offset == offset) + if (new_offset == offset) /* no-op */ return true; @@ -901,26 +900,6 @@ CurlInputStream::Seek(InputPlugin::offset_type new_offset, int whence, /* calculate the absolute offset */ - switch (whence) { - case SEEK_SET: - break; - - case SEEK_CUR: - new_offset += offset; - break; - - case SEEK_END: - if (size < 0) - /* stream size is not known */ - return false; - - new_offset += size; - break; - - default: - return false; - } - if (new_offset < 0) return false; diff --git a/src/input/plugins/FfmpegInputPlugin.cxx b/src/input/plugins/FfmpegInputPlugin.cxx index 9ae07dbef..6e0260aee 100644 --- a/src/input/plugins/FfmpegInputPlugin.cxx +++ b/src/input/plugins/FfmpegInputPlugin.cxx @@ -60,7 +60,7 @@ struct FfmpegInputStream final : public InputStream { /* virtual methods from InputStream */ bool IsEOF() override; size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; static constexpr Domain ffmpeg_domain("ffmpeg"); @@ -134,9 +134,9 @@ FfmpegInputStream::IsEOF() } bool -FfmpegInputStream::Seek(offset_type new_offset, int whence, Error &error) +FfmpegInputStream::Seek(offset_type new_offset, Error &error) { - int64_t ret = avio_seek(h, new_offset, whence); + int64_t ret = avio_seek(h, new_offset, SEEK_SET); if (ret >= 0) { eof = false; diff --git a/src/input/plugins/FileInputPlugin.cxx b/src/input/plugins/FileInputPlugin.cxx index 1035973b6..60c316567 100644 --- a/src/input/plugins/FileInputPlugin.cxx +++ b/src/input/plugins/FileInputPlugin.cxx @@ -56,7 +56,7 @@ struct FileInputStream final : public InputStream { } size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; static InputStream * @@ -99,11 +99,9 @@ input_file_open(const char *filename, } bool -FileInputStream::Seek(InputPlugin::offset_type new_offset, int whence, - Error &error) +FileInputStream::Seek(offset_type new_offset, Error &error) { - new_offset = (InputPlugin::offset_type)lseek(fd, (off_t)new_offset, - whence); + new_offset = (offset_type)lseek(fd, (off_t)new_offset, SEEK_SET); if (new_offset < 0) { error.SetErrno("Failed to seek"); return false; diff --git a/src/input/plugins/NfsInputPlugin.cxx b/src/input/plugins/NfsInputPlugin.cxx index b73389662..c90f00257 100644 --- a/src/input/plugins/NfsInputPlugin.cxx +++ b/src/input/plugins/NfsInputPlugin.cxx @@ -61,7 +61,7 @@ public: } size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; size_t @@ -77,10 +77,10 @@ NfsInputStream::Read(void *ptr, size_t read_size, Error &error) } bool -NfsInputStream::Seek(offset_type new_offset, int whence, Error &error) +NfsInputStream::Seek(offset_type new_offset, Error &error) { uint64_t current_offset; - int result = nfs_lseek(ctx, fh, new_offset, whence, + int result = nfs_lseek(ctx, fh, new_offset, SEEK_SET, ¤t_offset); if (result < 0) { error.SetErrno(-result, "smbc_lseek() failed"); diff --git a/src/input/plugins/RewindInputPlugin.cxx b/src/input/plugins/RewindInputPlugin.cxx index c18799c64..95f604044 100644 --- a/src/input/plugins/RewindInputPlugin.cxx +++ b/src/input/plugins/RewindInputPlugin.cxx @@ -64,7 +64,7 @@ public: } size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; private: /** @@ -117,13 +117,12 @@ RewindInputStream::Read(void *ptr, size_t read_size, Error &error) } bool -RewindInputStream::Seek(offset_type new_offset, int whence, +RewindInputStream::Seek(offset_type new_offset, Error &error) { assert(IsReady()); - if (whence == SEEK_SET && tail > 0 && - new_offset <= (offset_type)tail) { + if (tail > 0 && new_offset <= (offset_type)tail) { /* buffered seek */ assert(!ReadingFromBuffer() || @@ -139,7 +138,7 @@ RewindInputStream::Seek(offset_type new_offset, int whence, buffered range now */ tail = 0; - return ProxyInputStream::Seek(new_offset, whence, error); + return ProxyInputStream::Seek(new_offset, error); } } diff --git a/src/input/plugins/SmbclientInputPlugin.cxx b/src/input/plugins/SmbclientInputPlugin.cxx index aa1ba0381..79987180f 100644 --- a/src/input/plugins/SmbclientInputPlugin.cxx +++ b/src/input/plugins/SmbclientInputPlugin.cxx @@ -57,7 +57,7 @@ public: } size_t Read(void *ptr, size_t size, Error &error) override; - bool Seek(offset_type offset, int whence, Error &error) override; + bool Seek(offset_type offset, Error &error) override; }; /* @@ -136,11 +136,10 @@ SmbclientInputStream::Read(void *ptr, size_t read_size, Error &error) } bool -SmbclientInputStream::Seek(InputStream::offset_type new_offset, - int whence, Error &error) +SmbclientInputStream::Seek(offset_type new_offset, Error &error) { smbclient_mutex.lock(); - off_t result = smbc_lseek(fd, new_offset, whence); + off_t result = smbc_lseek(fd, new_offset, SEEK_SET); smbclient_mutex.unlock(); if (result < 0) { error.SetErrno("smbc_lseek() failed"); |