From 15a26b5af5ea589a89be1dae305396eb15f19c9d Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 9 Sep 2023 13:29:14 -0300 Subject: [PATCH] write syscall: support O_APPEND --- kernel-src/sys/syscalls/write.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kernel-src/sys/syscalls/write.c b/kernel-src/sys/syscalls/write.c index de43c7a0..fa090ab1 100644 --- a/kernel-src/sys/syscalls/write.c +++ b/kernel-src/sys/syscalls/write.c @@ -26,6 +26,16 @@ syscallret_t syscall_write(context_t *context, int fd, void *buffer, size_t size size_t byteswritten; uintmax_t offset = file->offset; + + if (file->flags & O_APPEND) { + vattr_t attr; + ret.errno = VOP_GETATTR(file->vnode, &attr, &_cpu()->thread->proc->cred); + if (ret.errno) + goto cleanup; + + offset = attr.size; + } + ret.errno = vfs_write(file->vnode, kernelbuff, size, offset, &byteswritten, fileflagstovnodeflags(file->flags)); if (ret.errno)