From c64904a4836c85645b63f0fb6c5c0b67cd2ccca0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 27 Jan 2020 21:47:30 +0100 Subject: [PATCH] Kernel: sys$readlink() should return the number of bytes written out --- Kernel/Process.cpp | 2 +- Userland/test_io.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) 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");