aboutsummaryrefslogtreecommitdiffstats
path: root/src/fs/io/FileReader.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/fs/io/FileReader.cxx26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/fs/io/FileReader.cxx b/src/fs/io/FileReader.cxx
index a19f472e8..e4198b71a 100644
--- a/src/fs/io/FileReader.cxx
+++ b/src/fs/io/FileReader.cxx
@@ -52,6 +52,19 @@ FileReader::Read(void *data, size_t size, Error &error)
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
FileReader::Close()
{
@@ -90,6 +103,19 @@ FileReader::Read(void *data, size_t size, Error &error)
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
FileReader::Close()
{