Bläddra i källkod

Kernel: sys$readlink() should return the number of bytes written out

Andreas Kling 5 år sedan
förälder
incheckning
c64904a483
2 ändrade filer med 6 tillägg och 1 borttagningar
  1. 1 1
      Kernel/Process.cpp
  2. 5 0
      Userland/test_io.cpp

+ 1 - 1
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)

+ 5 - 0
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");