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 */