diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 9ee629f083..094daf6a41 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -1854,7 +1854,7 @@ int Process::sys$readlink(const Syscall::SC_readlink_params* user_params) if (link_target.length() + 1 > params.buffer.size) return -ENAMETOOLONG; copy_to_user(params.buffer.data, link_target.characters(), link_target.length() + 1); - return 0; + return link_target.length() + 1; } int Process::sys$chdir(const char* user_path, size_t path_length) diff --git a/Userland/test_io.cpp b/Userland/test_io.cpp index a037615f62..6c50b62535 100644 --- a/Userland/test_io.cpp +++ b/Userland/test_io.cpp @@ -210,6 +210,11 @@ void test_unlink_symlink() perror("symlink"); ASSERT_NOT_REACHED(); } + + char buffer[PATH_MAX]; + rc = readlink("/tmp/linky", buffer, sizeof(buffer)); + ASSERT(rc == strlen("/proc/2/foo") + 1); + rc = unlink("/tmp/linky"); if (rc < 0) { perror("unlink");