aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/file.cpp10
-rw-r--r--common/file.h11
2 files changed, 17 insertions, 4 deletions
diff --git a/common/file.cpp b/common/file.cpp
index 5fc4f9012b..9cf554646c 100644
--- a/common/file.cpp
+++ b/common/file.cpp
@@ -219,4 +219,14 @@ bool DumpFile::flush() {
int32 DumpFile::pos() const { return _handle->pos(); }
+bool DumpFile::seek(int32 offset, int whence) {
+ SeekableWriteStream *ws = dynamic_cast<SeekableWriteStream *>(_handle);
+ return ws ? ws->seek(offset, whence) : -1;
+}
+
+int32 DumpFile::size() const {
+ SeekableWriteStream *ws = dynamic_cast<SeekableWriteStream *>(_handle);
+ return ws ? ws->size() : -1;
+}
+
} // End of namespace Common
diff --git a/common/file.h b/common/file.h
index 8ad6249d6d..ea7619b0c4 100644
--- a/common/file.h
+++ b/common/file.h
@@ -134,7 +134,7 @@ public:
* Some design ideas:
* - automatically drop all files into dumps/ dir? Might not be desired in all cases
*/
-class DumpFile : public WriteStream, public NonCopyable {
+class DumpFile : public SeekableWriteStream, public NonCopyable {
protected:
/** File handle to the actual file; 0 if no file is open. */
WriteStream *_handle;
@@ -158,11 +158,14 @@ public:
bool err() const;
void clearErr();
- virtual uint32 write(const void *dataPtr, uint32 dataSize);
+ virtual uint32 write(const void *dataPtr, uint32 dataSize) override;
- virtual bool flush();
+ virtual bool flush() override;
- virtual int32 pos() const;
+ virtual int32 pos() const override;
+
+ virtual bool seek(int32 offset, int whence = SEEK_SET) override;
+ virtual int32 size() const override;
};
} // End of namespace Common