diff --git a/Userland/ls.cpp b/Userland/ls.cpp index 0e369d900e..c4f2fb1bf5 100644 --- a/Userland/ls.cpp +++ b/Userland/ls.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -208,13 +209,11 @@ size_t print_name(const struct stat& st, const String& name, const char* path_fo } if (S_ISLNK(st.st_mode)) { if (path_for_link_resolution) { - char linkbuf[PATH_MAX]; - ssize_t nread = readlink(path_for_link_resolution, linkbuf, sizeof(linkbuf) - 1); - if (nread < 0) { - perror("readlink failed"); + auto link_destination = Core::File::read_link(path_for_link_resolution); + if (link_destination.is_null()) { + perror("readlink"); } else { - linkbuf[nread] = '\0'; - nprinted += printf(" -> ") + print_escaped(linkbuf); + nprinted += printf(" -> ") + print_escaped(link_destination.characters()); } } else { nprinted += printf("@"); diff --git a/Userland/test_io.cpp b/Userland/test_io.cpp index d469edc58d..6aa104c308 100644 --- a/Userland/test_io.cpp +++ b/Userland/test_io.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -212,9 +213,8 @@ void test_unlink_symlink() ASSERT_NOT_REACHED(); } - char buffer[PATH_MAX]; - rc = readlink("/tmp/linky", buffer, sizeof(buffer)); - ASSERT(rc == strlen("/proc/2/foo")); + auto target = Core::File::read_link("/tmp/linky"); + ASSERT(target == "/proc/2/foo"); rc = unlink("/tmp/linky"); if (rc < 0) {