mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:47:44 +00:00
LibCore: Add Core::System::readlink
This commit is contained in:
parent
612a3324d7
commit
415eb17490
2 changed files with 22 additions and 0 deletions
|
@ -1326,4 +1326,25 @@ ErrorOr<void> access(StringView pathname, int mode)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<String> readlink(StringView pathname)
|
||||||
|
{
|
||||||
|
// FIXME: Try again with a larger buffer.
|
||||||
|
char data[PATH_MAX];
|
||||||
|
#ifdef AK_OS_SERENITY
|
||||||
|
Syscall::SC_readlink_params small_params {
|
||||||
|
{ pathname.characters_without_null_termination(), pathname.length() },
|
||||||
|
{ data, sizeof(data) }
|
||||||
|
};
|
||||||
|
int rc = syscall(SC_readlink, &small_params);
|
||||||
|
HANDLE_SYSCALL_RETURN_VALUE("readlink", rc, String(data, rc));
|
||||||
|
#else
|
||||||
|
String path_string = pathname;
|
||||||
|
int rc = ::readlink(path_string.characters(), data, sizeof(data));
|
||||||
|
if (rc == -1)
|
||||||
|
return Error::from_syscall("readlink"sv, -errno);
|
||||||
|
|
||||||
|
return String(data, rc);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,5 +193,6 @@ ErrorOr<int> posix_openpt(int flags);
|
||||||
ErrorOr<void> grantpt(int fildes);
|
ErrorOr<void> grantpt(int fildes);
|
||||||
ErrorOr<void> unlockpt(int fildes);
|
ErrorOr<void> unlockpt(int fildes);
|
||||||
ErrorOr<void> access(StringView pathname, int mode);
|
ErrorOr<void> access(StringView pathname, int mode);
|
||||||
|
ErrorOr<String> readlink(StringView pathname);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue