From d4813dc2773de1d563bafac14e5452f82a7d1e5a Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 5 Jul 2023 00:07:43 -0300 Subject: [PATCH] fs: misc fixes related to symlinks --- kernel-src/fs/tmpfs.c | 2 ++ kernel-src/fs/vfs.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/kernel-src/fs/tmpfs.c b/kernel-src/fs/tmpfs.c index 387fb70c..c5ab2861 100644 --- a/kernel-src/fs/tmpfs.c +++ b/kernel-src/fs/tmpfs.c @@ -361,6 +361,8 @@ static int tmpfs_symlink(vnode_t *node, char *name, vattr_t *attr, char *path, c if (pathbuf == NULL) return ENOMEM; + strcpy(pathbuf, path); + vnode_t *linknode = NULL; int err = tmpfs_create(node, name, attr, V_TYPE_LINK, &linknode, cred); diff --git a/kernel-src/fs/vfs.c b/kernel-src/fs/vfs.c index 573da63d..eab872ff 100644 --- a/kernel-src/fs/vfs.c +++ b/kernel-src/fs/vfs.c @@ -153,7 +153,7 @@ int vfs_link(vnode_t *destref, char *destpath, vnode_t *linkref, char *linkpath, err = VOP_LINK(targetnode, parent, component, getcred()); VOP_RELEASE(targetnode); } else { - err = VOP_SYMLINK(parent, component, attr, linkpath, getcred()); + err = VOP_SYMLINK(parent, component, attr, destpath, getcred()); } VOP_RELEASE(parent); @@ -319,7 +319,7 @@ int vfs_lookup(vnode_t **result, vnode_t *start, char *path, char *lastcomp, int vnode_t *derefresult = NULL; // get the start node of the dereference - vnode_t *derefstart = next; + vnode_t *derefstart = current; if (*linkderef == '/' && _cpu()->thread && _cpu()->thread->proc) { spinlock_acquire(&_cpu()->thread->proc->lock);