From bb732b42e32fd301b9248b6e2e9a1bf91b09b163 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:30:19 +0100 Subject: [PATCH] virtual_file: add function to set position --- include/libtrx/virtual_file.h | 1 + src/virtual_file.c | 8 ++++++++ 2 files changed, 9 insertions(+) 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);