summaryrefslogtreecommitdiff
path: root/kernel/fs
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-30 21:07:46 -0400
committerFreya Murphy <freya@freyacat.org>2025-05-01 15:51:32 -0400
commit1a10a3725e7bea67e558715f6e9f78abcb415b3a (patch)
tree1f35cf35f61cd58a86f2a8e7ea14c565db20a211 /kernel/fs
parenttarfs (diff)
downloadcomus-1a10a3725e7bea67e558715f6e9f78abcb415b3a.tar.gz
comus-1a10a3725e7bea67e558715f6e9f78abcb415b3a.tar.bz2
comus-1a10a3725e7bea67e558715f6e9f78abcb415b3a.zip
finish syscall impls
Diffstat (limited to 'kernel/fs')
-rw-r--r--kernel/fs/tar.c15
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, &sect, NULL, false))
return 1;