1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 11:57:35 +00:00

Remove FS::read_entire_inode() in favor of Inode::read_entire().

This commit is contained in:
Andreas Kling 2018-12-21 17:45:42 +01:00
parent 04ee693925
commit 7bc41532be
9 changed files with 9 additions and 66 deletions

View file

@ -13,7 +13,7 @@ FileSystemPath::FileSystemPath(const String& s)
bool FileSystemPath::canonicalize(bool resolve_symbolic_links) bool FileSystemPath::canonicalize(bool resolve_symbolic_links)
{ {
// FIXME: Implement "resolveSymbolicLinks" // FIXME: Implement "resolve_symbolic_links"
(void) resolve_symbolic_links; (void) resolve_symbolic_links;
auto parts = m_string.split('/'); auto parts = m_string.split('/');
Vector<String> canonical_parts; Vector<String> canonical_parts;

View file

@ -35,7 +35,6 @@ VFS_OBJS = \
../VirtualFileSystem/FileSystem.o \ ../VirtualFileSystem/FileSystem.o \
../VirtualFileSystem/DiskBackedFileSystem.o \ ../VirtualFileSystem/DiskBackedFileSystem.o \
../VirtualFileSystem/Ext2FileSystem.o \ ../VirtualFileSystem/Ext2FileSystem.o \
../VirtualFileSystem/InodeIdentifier.o \
../VirtualFileSystem/VirtualFileSystem.o \ ../VirtualFileSystem/VirtualFileSystem.o \
../VirtualFileSystem/FileDescriptor.o \ ../VirtualFileSystem/FileDescriptor.o \
../VirtualFileSystem/SyntheticFileSystem.o ../VirtualFileSystem/SyntheticFileSystem.o

View file

@ -195,9 +195,8 @@ ByteBuffer FileDescriptor::read_entire_file()
return buffer; return buffer;
} }
if (m_vnode->core_inode()) ASSERT(inode());
return m_vnode->core_inode()->read_entire(this); return inode()->read_entire(this);
return m_vnode->fs()->read_entire_inode(m_vnode->inode, this);
} }
bool FileDescriptor::is_directory() const bool FileDescriptor::is_directory() const

View file

@ -49,8 +49,6 @@ FS* FS::from_fsid(dword id)
ByteBuffer Inode::read_entire(FileDescriptor* descriptor) ByteBuffer Inode::read_entire(FileDescriptor* descriptor)
{ {
return fs().read_entire_inode(identifier(), descriptor);
/*
size_t initial_size = metadata().size ? metadata().size : 4096; size_t initial_size = metadata().size ? metadata().size : 4096;
auto contents = ByteBuffer::create_uninitialized(initial_size); auto contents = ByteBuffer::create_uninitialized(initial_size);
@ -60,7 +58,6 @@ ByteBuffer Inode::read_entire(FileDescriptor* descriptor)
Unix::off_t offset = 0; Unix::off_t offset = 0;
for (;;) { for (;;) {
nread = read_bytes(offset, sizeof(buffer), buffer, descriptor); nread = read_bytes(offset, sizeof(buffer), buffer, descriptor);
//kprintf("nread: %u, bufsiz: %u, initial_size: %u\n", nread, sizeof(buffer), initial_size);
ASSERT(nread <= (ssize_t)sizeof(buffer)); ASSERT(nread <= (ssize_t)sizeof(buffer));
if (nread <= 0) if (nread <= 0)
break; break;
@ -74,45 +71,6 @@ ByteBuffer Inode::read_entire(FileDescriptor* descriptor)
return nullptr; return nullptr;
} }
contents.trim(offset);
return contents;
*/
}
ByteBuffer FS::read_entire_inode(InodeIdentifier inode_id, FileDescriptor* handle) const
{
ASSERT(inode_id.fsid() == id());
auto inode = get_inode(inode_id);
if (!inode) {
kprintf("fs: read_entire_inode: lookup for inode %u:%u failed\n", id(), inode_id.index());
return nullptr;
}
auto metadata = inode->metadata();
size_t initialSize = metadata.size ? metadata.size : 4096;
auto contents = ByteBuffer::create_uninitialized(initialSize);
ssize_t nread;
byte buffer[4096];
byte* out = contents.pointer();
Unix::off_t offset = 0;
for (;;) {
nread = inode->read_bytes(offset, sizeof(buffer), buffer, handle);
//kprintf("nread: %u, bufsiz: %u, initialSize: %u\n", nread, sizeof(buffer), initialSize);
ASSERT(nread <= (ssize_t)sizeof(buffer));
if (nread <= 0)
break;
memcpy(out, buffer, nread);
out += nread;
offset += nread;
ASSERT(offset <= (ssize_t)initialSize); // FIXME: Support dynamically growing the buffer.
}
if (nread < 0) {
kprintf("[fs] readInode: ERROR: %d\n", nread);
return nullptr;
}
contents.trim(offset); contents.trim(offset);
return contents; return contents;
} }

View file

@ -51,8 +51,6 @@ public:
virtual RetainPtr<Inode> get_inode(InodeIdentifier) const = 0; virtual RetainPtr<Inode> get_inode(InodeIdentifier) const = 0;
ByteBuffer read_entire_inode(InodeIdentifier, FileDescriptor* = nullptr) const;
protected: protected:
FS(); FS();

View file

@ -1,9 +0,0 @@
#include "InodeIdentifier.h"
#include "FileSystem.h"
ByteBuffer InodeIdentifier::read_entire_file() const
{
if (!fs())
return { };
return fs()->read_entire_inode(*this, nullptr);
}

View file

@ -35,8 +35,6 @@ public:
bool is_root_inode() const; bool is_root_inode() const;
ByteBuffer read_entire_file() const;
private: private:
dword m_fsid { 0 }; dword m_fsid { 0 };
dword m_index { 0 }; dword m_index { 0 };

View file

@ -312,12 +312,12 @@ bool VFS::mkdir(const String& path, mode_t mode, InodeIdentifier base, int& erro
return false; return false;
} }
InodeIdentifier VFS::resolveSymbolicLink(InodeIdentifier base, InodeIdentifier symlinkInode, int& error) InodeIdentifier VFS::resolve_symbolic_link(InodeIdentifier base, Inode& symlink_inode, int& error)
{ {
auto symlinkContents = symlinkInode.read_entire_file(); auto symlink_contents = symlink_inode.read_entire();
if (!symlinkContents) if (!symlink_contents)
return { }; return { };
auto linkee = String((const char*)symlinkContents.pointer(), symlinkContents.size()); auto linkee = String((const char*)symlink_contents.pointer(), symlink_contents.size());
#ifdef VFS_DEBUG #ifdef VFS_DEBUG
kprintf("linkee (%s)(%u) from %u:%u\n", linkee.characters(), linkee.length(), base.fsid(), base.index()); kprintf("linkee (%s)(%u) from %u:%u\n", linkee.characters(), linkee.length(), base.fsid(), base.index());
#endif #endif
@ -447,7 +447,7 @@ InodeIdentifier VFS::resolve_path(const String& path, InodeIdentifier base, int&
if (options & O_NOFOLLOW_NOERROR) if (options & O_NOFOLLOW_NOERROR)
return crumb_id; return crumb_id;
} }
crumb_id = resolveSymbolicLink(parent, crumb_id, error); crumb_id = resolve_symbolic_link(parent, *crumb_inode, error);
if (!crumb_id.is_valid()) { if (!crumb_id.is_valid()) {
kprintf("Symbolic link resolution failed :(\n"); kprintf("Symbolic link resolution failed :(\n");
return { }; return { };

View file

@ -135,7 +135,7 @@ private:
void traverse_directory_inode(Inode&, Function<bool(const FS::DirectoryEntry&)>); void traverse_directory_inode(Inode&, Function<bool(const FS::DirectoryEntry&)>);
InodeIdentifier resolve_path(const String& path, InodeIdentifier base, int& error, int options = 0, InodeIdentifier* deepest_dir = nullptr); InodeIdentifier resolve_path(const String& path, InodeIdentifier base, int& error, int options = 0, InodeIdentifier* deepest_dir = nullptr);
InodeIdentifier resolveSymbolicLink(InodeIdentifier base, InodeIdentifier symlinkInode, int& error); InodeIdentifier resolve_symbolic_link(InodeIdentifier base, Inode& symlink_inode, int& error);
RetainPtr<Vnode> allocateNode(); RetainPtr<Vnode> allocateNode();
void freeNode(Vnode*); void freeNode(Vnode*);