InputStream: make Seek() always absolute

Remove the "whence" parameter that is not actually necessary, and only
complicates the InputStream implementations.
This commit is contained in:
Max Kellermann
2014-05-22 10:10:16 +02:00
parent 374c6a27db
commit 07b93dcf80
28 changed files with 184 additions and 127 deletions

View File

@@ -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;
}