diff --git a/include/libtrx/virtual_file.h b/include/libtrx/virtual_file.h index 1396c63..2d8cb8d 100644 --- a/include/libtrx/virtual_file.h +++ b/include/libtrx/virtual_file.h @@ -14,6 +14,7 @@ VFILE *VFile_CreateFromBuffer(const char *data, size_t size); void VFile_Close(VFILE *file); size_t VFile_GetPos(const VFILE *file); +void VFile_SetPos(VFILE *file, size_t pos); void VFile_Skip(VFILE *file, int32_t offset); void VFile_Read(VFILE *file, void *target, size_t size); diff --git a/src/virtual_file.c b/src/virtual_file.c index 26ec2f4..d5c64d0 100644 --- a/src/virtual_file.c +++ b/src/virtual_file.c @@ -53,6 +53,14 @@ size_t VFile_GetPos(const VFILE *file) return file->cur_ptr - file->content; } +void VFile_SetPos(VFILE *file, const size_t pos) +{ + const size_t cur_pos = VFile_GetPos(file); + const int32_t offset = pos - cur_pos; + assert(cur_pos + offset <= file->size); + file->cur_ptr += offset; +} + void VFile_Skip(VFILE *file, int32_t offset) { const size_t cur_pos = VFile_GetPos(file);