From abe30b526dc5017d6c9adb61472ebe3cfc727482 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 24 May 2021 19:11:54 +0200 Subject: Add different seek modes --- src/filesystem.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/filesystem.c b/src/filesystem.c index 3fe95ab..327b613 100644 --- a/src/filesystem.c +++ b/src/filesystem.c @@ -274,10 +274,27 @@ _fs_write_to_block(u8 *src, u16 n_bytes, u16 blk_offset, _fs_write(&block, block_pos, sizeof(FileBlock)); } +typedef enum { + FS_SEEK_SET, + FS_SEEK_CUR, + FS_SEEK_END, +} SeekMode; + int -fs_seek(File *file, int offset) { +fs_seek(File *file, int offset, SeekMode mode) { u16 file_size = fs_file_size(file); - u16 new_offset = MAX((int)file->offset + offset, 0); + u16 new_offset = 0; + switch (mode) { + case FS_SEEK_SET: { + new_offset = offset; + } break; + case FS_SEEK_CUR: { + new_offset = MAX((int)file->offset + offset, 0); + } break; + case FS_SEEK_END: { + new_offset = MAX((int)file_size - 1 + offset, 0); + } break; + } if (new_offset >= file_size) { return -1; } -- cgit v1.2.1