From d90f8d0950a8a504a69a6ca61c4a6fa2ef95f129 Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 1 May 2023 00:44:56 -0300 Subject: [PATCH] vfs: fix trailing slashes on lookup --- kernel-src/fs/vfs.c | 7 +++++++ kernel-src/include/kernel/vfs.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/kernel-src/fs/vfs.c b/kernel-src/fs/vfs.c index 9c5df019..19b629ce 100644 --- a/kernel-src/fs/vfs.c +++ b/kernel-src/fs/vfs.c @@ -256,6 +256,13 @@ int vfs_lookup(vnode_t **result, vnode_t *start, char *path, char *lastcomp, int size_t complen = strlen(component); bool islast = i + complen == pathlen; + // check if its last with trailing '/' (or '\0's in this case, as '/'s were turned into '\0's in the buffer) + if (!islast) { + int j; + for (j = i + complen; j < pathlen && compbuffer[j] == '\0'; ++j); + islast = j == pathlen; + } + if (islast && (flags & VFS_LOOKUP_PARENT)) { strcpy(lastcomp, component); break; diff --git a/kernel-src/include/kernel/vfs.h b/kernel-src/include/kernel/vfs.h index 54e3419b..4aed9416 100644 --- a/kernel-src/include/kernel/vfs.h +++ b/kernel-src/include/kernel/vfs.h @@ -130,6 +130,8 @@ int vfs_close(vnode_t *node, int flags); int vfs_write(vnode_t *node, void *buffer, size_t size, uintmax_t offset, size_t *written, int flags); int vfs_read(vnode_t *node, void *buffer, size_t size, uintmax_t offset, size_t *bytesread, int flags); int vfs_create(vnode_t *ref, char *path, vattr_t *attr, int type, vnode_t **node); +int vfs_link(vnode_t *destref, char *destpath, vnode_t *linkref, char *linkpath, int type, vattr_t *attr); +int vfs_unlink(vnode_t *ref, char *path); #define VFS_LOOKUP_PARENT 1 #define VFS_LOOKUP_NOLINK 2