From 90a6ebafe9981e3bdf7022431bcefa137d407d6c Mon Sep 17 00:00:00 2001 From: Malo Lecomte Date: Sun, 24 Apr 2022 02:43:52 +0200 Subject: [PATCH] feat(iso): add seek function --- k/iso.c | 25 +++++++++++++++++++++++++ k/iso.h | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/k/iso.c b/k/iso.c index f9f6961..ec2110a 100644 --- a/k/iso.c +++ b/k/iso.c @@ -102,6 +102,31 @@ s64 read(int fd, void *buf, size_t count) return i; } +s64 seek(int fd, u32 offset, int whence) +{ + if (fd > MAX_FD) + return -1; + + struct file_entry *f = &fd_table[fd]; + if (!f->open) + return -1; + + switch (whence) + { + case SEEK_SET: + f->file_offset = offset; + break; + case SEEK_CUR: + f->file_offset += offset; + break; + case SEEK_END: + f->file_offset = f->file_size + offset; + break; + } + + return f->file_offset; +} + int close(int fd) { return destroy_fd(fd); diff --git a/k/iso.h b/k/iso.h index 85dc524..904c26e 100644 --- a/k/iso.h +++ b/k/iso.h @@ -3,10 +3,18 @@ #include +/* open flags */ #define O_RDONLY 0 +/* seek flags */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +/* functions */ int open(const char *path, int flags); s64 read(int fd, void *buf, size_t count); +s64 seek(int fd, u32 offset, int whence); int close(int fd); #endif /* !ISO_H */