From 6f51733e926b83a165eb71f33fed122c7c75f46f Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Tue, 23 Jan 2024 19:31:03 -0600 Subject: [PATCH] fseek and rewind added. No support for ftell in the microkernel. --- f256lib/api.h | 4 ++-- f256lib/file.c | 12 ++++++++++++ f256lib/file.h | 28 ++++++++++++++++------------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/f256lib/api.h b/f256lib/api.h index 7729a84..3dec230 100644 --- a/f256lib/api.h +++ b/f256lib/api.h @@ -183,9 +183,9 @@ struct fs_delete_t { }; struct fs_seek_t { - uint8_t streak; + uint8_t stream; uint8_t cookie; - uint32_t position; + uint32_t offset; }; struct file_t { diff --git a/f256lib/file.c b/f256lib/file.c index df6bbdc..26568ae 100644 --- a/f256lib/file.c +++ b/f256lib/file.c @@ -279,6 +279,18 @@ void fileReset(void) { } +int16_t fileSeek(uint8_t id, uint32_t offset, uint8_t whence) { + if (whence != SEEK_SET) return -1; + + kernelArgs->file.seek.stream = id; + kernelArgs->file.seek.offset = offset; + kernelCall(File.Seek); + if (kernelError) return -1; + + return 0; +} + + int16_t fileUnlink(char *name) { char drive; char stream; diff --git a/f256lib/file.h b/f256lib/file.h index 2a6e980..5e5108e 100644 --- a/f256lib/file.h +++ b/f256lib/file.h @@ -53,6 +53,7 @@ int16_t fileRead(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t fd); fileDirEntT *fileReadDir(fileDirT *dir); int16_t fileRename(char *name, char *to); void fileReset(void); +int16_t fileSeek(uint8_t id, uint32_t offset, uint8_t whence); int16_t fileUnlink(char *name); int16_t fileWrite(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t fd); @@ -65,18 +66,21 @@ int16_t fileWrite(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t fd); // Aliases to the standard names if they don't exist. #ifndef DIR -#define close fileClose -#define closedir fileCloseDir -#define DIR fileDirT -#define dirent fileDirEntS -#define FILE uint8_t -#define fopen fileOpen -#define fread fileRead -#define fwrite fileWrite -#define opendir fileOpenDir -#define readdir fileReadDir -#define rename fileRename -#define unlink fileUnlink +#define close fileClose +#define closedir fileCloseDir +#define DIR fileDirT +#define dirent fileDirEntS +#define FILE uint8_t +#define fopen fileOpen +#define fread fileRead +#define fseek fileSeek +#define fwrite fileWrite +#define opendir fileOpenDir +#define readdir fileReadDir +#define rename fileRename +#define rewind(s) (void)fileSeek(s, 0, SEEK_SET) +#define SEEK_SET 0 +#define unlink fileUnlink #endif