ladybird/Kernel/FileSystem/InodeFile.cpp
Andreas Kling 5e1c7cb32c Kernel: Memory-mapped files now have the absolute path as their name.
It's generated when the mapping is first created, so it won't update if
the file moves. Maybe that's something we should support, too.
2019-06-02 10:14:28 +02:00

47 lines
1.4 KiB
C++

#include <Kernel/FileSystem/InodeFile.h>
#include <Kernel/FileSystem/Inode.h>
#include <Kernel/FileSystem/FileDescriptor.h>
#include <Kernel/FileSystem/VirtualFileSystem.h>
#include <Kernel/Process.h>
InodeFile::InodeFile(Retained<Inode>&& inode)
: m_inode(move(inode))
{
}
InodeFile::~InodeFile()
{
}
ssize_t InodeFile::read(FileDescriptor& descriptor, byte* buffer, ssize_t count)
{
return m_inode->read_bytes(descriptor.offset(), count, buffer, &descriptor);
}
ssize_t InodeFile::write(FileDescriptor& descriptor, const byte* data, ssize_t count)
{
return m_inode->write_bytes(descriptor.offset(), count, data, &descriptor);
}
KResultOr<Region*> InodeFile::mmap(Process& process, FileDescriptor& descriptor, LinearAddress preferred_laddr, size_t offset, size_t size, int prot)
{
ASSERT(offset == 0);
// FIXME: If PROT_EXEC, check that the underlying file system isn't mounted noexec.
InterruptDisabler disabler;
auto* region = process.allocate_file_backed_region(preferred_laddr, size, inode(), descriptor.absolute_path(), prot);
if (!region)
return KResult(-ENOMEM);
return region;
}
String InodeFile::absolute_path(const FileDescriptor& descriptor) const
{
ASSERT_NOT_REACHED();
ASSERT(descriptor.custody());
return descriptor.absolute_path();
}
KResult InodeFile::truncate(off_t size)
{
return m_inode->truncate(size);
}