21#include "pedigree/kernel/LockGuard.h"
22#include "pedigree/kernel/utilities/utility.h"
24#include "Filesystem.h"
30 Time::Timestamp creationTime, uintptr_t inode,
Filesystem* pFs,
size_t size,
32 :
File(name, accessedTime, modifiedTime, creationTime, inode, pFs, size, pParent),
42 replacement.adopt(target);
43 result.swap(replacement);
48 if (m_sTarget.length() && !bForce)
51 size_t sz = getSize();
60 char* pBuffer =
new char[sz];
61 const size_t bytesRead =
read(0ULL, sz,
reinterpret_cast<uintptr_t
>(pBuffer));
64 m_sTarget.assign(pBuffer, bytesRead);
73 File* parent = parentLease.get();
81 if (target.length() && target[0] ==
'/')
90 if (m_sTarget.length() < bufLen)
91 bufLen = m_sTarget.length();
93 StringCopyN(pBuffer,
static_cast<const char*
>(m_sTarget), bufLen);
virtual uint64_t read(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final
void getNamespace(ParentLease &parent, String &name) const
File * findRetained(const StringView &path, Directory::ChildLease &result, File *pStartNode=nullptr)
virtual File * followLinkRetained(Directory::ChildLease &result)
virtual bool isBytewise() const
void initialise(bool bForce=false)
virtual int followLink(char *pBuffer, size_t bufLen)
static File * retainTarget(File *target, Directory::ChildLease &result)
File * findRetained(const String &path, Directory::ChildLease &result, File *pStartNode=nullptr)