Commit dd5daa07 authored by Max Kellermann's avatar Max Kellermann

fs/io/FileReader: add method Seek()

parent ef5090c3
...@@ -52,6 +52,19 @@ FileReader::Read(void *data, size_t size, Error &error) ...@@ -52,6 +52,19 @@ FileReader::Read(void *data, size_t size, Error &error)
return nbytes; return nbytes;
} }
bool
FileReader::Seek(off_t offset, Error &error)
{
assert(IsDefined());
auto result = SetFilePointer(handle, offset, nullptr, FILE_BEGIN);
const bool success = result != INVALID_SET_FILE_POINTER;
if (!success)
error.SetLastError("Failed to seek");
return success;
}
void void
FileReader::Close() FileReader::Close()
{ {
...@@ -90,6 +103,19 @@ FileReader::Read(void *data, size_t size, Error &error) ...@@ -90,6 +103,19 @@ FileReader::Read(void *data, size_t size, Error &error)
return nbytes; return nbytes;
} }
bool
FileReader::Seek(off_t offset, Error &error)
{
assert(IsDefined());
auto result = lseek(fd, offset, SEEK_SET);
const bool success = result >= 0;
if (!success)
error.SetErrno("Failed to seek");
return success;
}
void void
FileReader::Close() FileReader::Close()
{ {
......
...@@ -61,6 +61,8 @@ public: ...@@ -61,6 +61,8 @@ public:
void Close(); void Close();
bool Seek(off_t offset, Error &error);
/* virtual methods from class Reader */ /* virtual methods from class Reader */
size_t Read(void *data, size_t size, Error &error) override; size_t Read(void *data, size_t size, Error &error) override;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment