mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
LibCore: Remove DeprecatedFile::read_link
This commit is contained in:
parent
85c897dc17
commit
4de99d553e
2 changed files with 0 additions and 62 deletions
|
@ -181,67 +181,6 @@ DeprecatedString DeprecatedFile::absolute_path(DeprecatedString const& path)
|
||||||
return LexicalPath::canonicalized_path(full_path.string());
|
return LexicalPath::canonicalized_path(full_path.string());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AK_OS_SERENITY
|
|
||||||
|
|
||||||
ErrorOr<DeprecatedString> DeprecatedFile::read_link(DeprecatedString const& link_path)
|
|
||||||
{
|
|
||||||
// First, try using a 64-byte buffer, that ought to be enough for anybody.
|
|
||||||
char small_buffer[64];
|
|
||||||
|
|
||||||
int rc = serenity_readlink(link_path.characters(), link_path.length(), small_buffer, sizeof(small_buffer));
|
|
||||||
if (rc < 0)
|
|
||||||
return Error::from_errno(errno);
|
|
||||||
|
|
||||||
size_t size = rc;
|
|
||||||
// If the call was successful, the syscall (unlike the LibC wrapper)
|
|
||||||
// returns the full size of the link. Let's see if our small buffer
|
|
||||||
// was enough to read the whole link.
|
|
||||||
if (size <= sizeof(small_buffer))
|
|
||||||
return DeprecatedString { small_buffer, size };
|
|
||||||
// Nope, but at least now we know the right size.
|
|
||||||
char* large_buffer_ptr;
|
|
||||||
auto large_buffer = StringImpl::create_uninitialized(size, large_buffer_ptr);
|
|
||||||
|
|
||||||
rc = serenity_readlink(link_path.characters(), link_path.length(), large_buffer_ptr, size);
|
|
||||||
if (rc < 0)
|
|
||||||
return Error::from_errno(errno);
|
|
||||||
|
|
||||||
size_t new_size = rc;
|
|
||||||
if (new_size == size)
|
|
||||||
return { *large_buffer };
|
|
||||||
|
|
||||||
// If we're here, the symlink has changed while we were looking at it.
|
|
||||||
// If it became shorter, our buffer is valid, we just have to trim it a bit.
|
|
||||||
if (new_size < size)
|
|
||||||
return DeprecatedString { large_buffer_ptr, new_size };
|
|
||||||
// Otherwise, here's not much we can do, unless we want to loop endlessly
|
|
||||||
// in this case. Let's leave it up to the caller whether to loop.
|
|
||||||
errno = EAGAIN;
|
|
||||||
return Error::from_errno(errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// This is a sad version for other systems. It has to always make a copy of the
|
|
||||||
// link path, and to always make two syscalls to get the right size first.
|
|
||||||
ErrorOr<DeprecatedString> DeprecatedFile::read_link(DeprecatedString const& link_path)
|
|
||||||
{
|
|
||||||
struct stat statbuf = {};
|
|
||||||
int rc = lstat(link_path.characters(), &statbuf);
|
|
||||||
if (rc < 0)
|
|
||||||
return Error::from_errno(errno);
|
|
||||||
char* buffer_ptr;
|
|
||||||
auto buffer = StringImpl::create_uninitialized(statbuf.st_size, buffer_ptr);
|
|
||||||
if (readlink(link_path.characters(), buffer_ptr, statbuf.st_size) < 0)
|
|
||||||
return Error::from_errno(errno);
|
|
||||||
// (See above.)
|
|
||||||
if (rc == statbuf.st_size)
|
|
||||||
return { *buffer };
|
|
||||||
return DeprecatedString { buffer_ptr, (size_t)rc };
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static DeprecatedString get_duplicate_name(DeprecatedString const& path, int duplicate_count)
|
static DeprecatedString get_duplicate_name(DeprecatedString const& path, int duplicate_count)
|
||||||
{
|
{
|
||||||
if (duplicate_count == 0) {
|
if (duplicate_count == 0) {
|
||||||
|
|
|
@ -71,7 +71,6 @@ public:
|
||||||
static ErrorOr<void, CopyError> copy_file_or_directory(DeprecatedString const& dst_path, DeprecatedString const& src_path, RecursionMode = RecursionMode::Allowed, LinkMode = LinkMode::Disallowed, AddDuplicateFileMarker = AddDuplicateFileMarker::Yes, PreserveMode = PreserveMode::Nothing);
|
static ErrorOr<void, CopyError> copy_file_or_directory(DeprecatedString const& dst_path, DeprecatedString const& src_path, RecursionMode = RecursionMode::Allowed, LinkMode = LinkMode::Disallowed, AddDuplicateFileMarker = AddDuplicateFileMarker::Yes, PreserveMode = PreserveMode::Nothing);
|
||||||
|
|
||||||
static DeprecatedString real_path_for(DeprecatedString const& filename);
|
static DeprecatedString real_path_for(DeprecatedString const& filename);
|
||||||
static ErrorOr<DeprecatedString> read_link(DeprecatedString const& link_path);
|
|
||||||
|
|
||||||
virtual bool open(OpenMode) override;
|
virtual bool open(OpenMode) override;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue