diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-30 21:07:46 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-05-01 15:51:32 -0400 |
commit | 1a10a3725e7bea67e558715f6e9f78abcb415b3a (patch) | |
tree | 1f35cf35f61cd58a86f2a8e7ea14c565db20a211 /kernel/fs/tar.c | |
parent | tarfs (diff) | |
download | comus-1a10a3725e7bea67e558715f6e9f78abcb415b3a.tar.gz comus-1a10a3725e7bea67e558715f6e9f78abcb415b3a.tar.bz2 comus-1a10a3725e7bea67e558715f6e9f78abcb415b3a.zip |
finish syscall impls
Diffstat (limited to 'kernel/fs/tar.c')
-rw-r--r-- | kernel/fs/tar.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/fs/tar.c b/kernel/fs/tar.c index 7f34107..86af81f 100644 --- a/kernel/fs/tar.c +++ b/kernel/fs/tar.c @@ -150,15 +150,15 @@ int tar_seek(struct file *in, long int off, int whence) switch (whence) { case SEEK_SET: file->offset = off; - return 0; + return file->offset; case SEEK_CUR: file->offset += off; - return 0; + return file->offset; case SEEK_END: file->offset = file->len + off; - return 0; + return file->offset; default: - return 1; + return -1; } } @@ -202,12 +202,17 @@ void tar_close(struct file *file) kfree(file); } -int tar_open(struct file_system *fs, const char *path, struct file **out) +int tar_open(struct file_system *fs, const char *path, int flags, + struct file **out) { struct tar_file *file; struct tar_hdr hdr; size_t sect; + // cannot create or write files + if (flags != O_RDONLY) + return 1; + if (tar_locate(fs, path, &hdr, §, NULL, false)) return 1; |