diff --git a/src/common/mm_io.cpp b/src/common/mm_io.cpp index d0a189066..0d59ca2f0 100644 --- a/src/common/mm_io.cpp +++ b/src/common/mm_io.cpp @@ -265,6 +265,15 @@ mm_io_c::puts(const std::string &s) { return num_written; } +memory_cptr +mm_io_c::read(size_t size) { + auto buffer = memory_c::alloc(size); + if (read(buffer, size) != size) + throw mtx::mm_io::end_of_file_x{}; + + return buffer; +} + uint32_t mm_io_c::read(void *buffer, size_t size) { diff --git a/src/common/mm_io.h b/src/common/mm_io.h index 4245fe8cf..8c6e296ef 100644 --- a/src/common/mm_io.h +++ b/src/common/mm_io.h @@ -43,6 +43,7 @@ public: virtual uint64 getFilePointer() = 0; virtual void setFilePointer(int64 offset, seek_mode mode = seek_beginning) = 0; virtual bool setFilePointer2(int64 offset, seek_mode mode = seek_beginning); + virtual memory_cptr read(size_t size); virtual uint32 read(void *buffer, size_t size); virtual uint32_t read(std::string &buffer, size_t size, size_t offset = 0); virtual uint32_t read(memory_cptr &buffer, size_t size, int offset = 0);