diff --git a/AK/FileSystemPath.cpp b/AK/FileSystemPath.cpp index d52bd49e26..5f467c8594 100644 --- a/AK/FileSystemPath.cpp +++ b/AK/FileSystemPath.cpp @@ -13,7 +13,7 @@ FileSystemPath::FileSystemPath(const String& s) bool FileSystemPath::canonicalize(bool resolve_symbolic_links) { - // FIXME: Implement "resolveSymbolicLinks" + // FIXME: Implement "resolve_symbolic_links" (void) resolve_symbolic_links; auto parts = m_string.split('/'); Vector canonical_parts; diff --git a/Kernel/Makefile b/Kernel/Makefile index 68628d2700..64d619a716 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -35,7 +35,6 @@ VFS_OBJS = \ ../VirtualFileSystem/FileSystem.o \ ../VirtualFileSystem/DiskBackedFileSystem.o \ ../VirtualFileSystem/Ext2FileSystem.o \ - ../VirtualFileSystem/InodeIdentifier.o \ ../VirtualFileSystem/VirtualFileSystem.o \ ../VirtualFileSystem/FileDescriptor.o \ ../VirtualFileSystem/SyntheticFileSystem.o diff --git a/VirtualFileSystem/FileDescriptor.cpp b/VirtualFileSystem/FileDescriptor.cpp index 8a9e9035f3..7cc7cdb961 100644 --- a/VirtualFileSystem/FileDescriptor.cpp +++ b/VirtualFileSystem/FileDescriptor.cpp @@ -195,9 +195,8 @@ ByteBuffer FileDescriptor::read_entire_file() return buffer; } - if (m_vnode->core_inode()) - return m_vnode->core_inode()->read_entire(this); - return m_vnode->fs()->read_entire_inode(m_vnode->inode, this); + ASSERT(inode()); + return inode()->read_entire(this); } bool FileDescriptor::is_directory() const diff --git a/VirtualFileSystem/FileSystem.cpp b/VirtualFileSystem/FileSystem.cpp index 74c1d786b9..567c9647c2 100644 --- a/VirtualFileSystem/FileSystem.cpp +++ b/VirtualFileSystem/FileSystem.cpp @@ -49,8 +49,6 @@ FS* FS::from_fsid(dword id) ByteBuffer Inode::read_entire(FileDescriptor* descriptor) { - return fs().read_entire_inode(identifier(), descriptor); -/* size_t initial_size = metadata().size ? metadata().size : 4096; auto contents = ByteBuffer::create_uninitialized(initial_size); @@ -60,7 +58,6 @@ ByteBuffer Inode::read_entire(FileDescriptor* descriptor) Unix::off_t offset = 0; for (;;) { 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)); if (nread <= 0) break; @@ -74,45 +71,6 @@ ByteBuffer Inode::read_entire(FileDescriptor* descriptor) 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); return contents; } diff --git a/VirtualFileSystem/FileSystem.h b/VirtualFileSystem/FileSystem.h index 8448be8806..73d53f1932 100644 --- a/VirtualFileSystem/FileSystem.h +++ b/VirtualFileSystem/FileSystem.h @@ -51,8 +51,6 @@ public: virtual RetainPtr get_inode(InodeIdentifier) const = 0; - ByteBuffer read_entire_inode(InodeIdentifier, FileDescriptor* = nullptr) const; - protected: FS(); diff --git a/VirtualFileSystem/InodeIdentifier.cpp b/VirtualFileSystem/InodeIdentifier.cpp deleted file mode 100644 index b367a7040a..0000000000 --- a/VirtualFileSystem/InodeIdentifier.cpp +++ /dev/null @@ -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); -} diff --git a/VirtualFileSystem/InodeIdentifier.h b/VirtualFileSystem/InodeIdentifier.h index 9ecee139ff..9740292bf9 100644 --- a/VirtualFileSystem/InodeIdentifier.h +++ b/VirtualFileSystem/InodeIdentifier.h @@ -35,8 +35,6 @@ public: bool is_root_inode() const; - ByteBuffer read_entire_file() const; - private: dword m_fsid { 0 }; dword m_index { 0 }; diff --git a/VirtualFileSystem/VirtualFileSystem.cpp b/VirtualFileSystem/VirtualFileSystem.cpp index 789ed67b61..30677464d0 100644 --- a/VirtualFileSystem/VirtualFileSystem.cpp +++ b/VirtualFileSystem/VirtualFileSystem.cpp @@ -312,12 +312,12 @@ bool VFS::mkdir(const String& path, mode_t mode, InodeIdentifier base, int& erro 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(); - if (!symlinkContents) + auto symlink_contents = symlink_inode.read_entire(); + if (!symlink_contents) return { }; - auto linkee = String((const char*)symlinkContents.pointer(), symlinkContents.size()); + auto linkee = String((const char*)symlink_contents.pointer(), symlink_contents.size()); #ifdef VFS_DEBUG kprintf("linkee (%s)(%u) from %u:%u\n", linkee.characters(), linkee.length(), base.fsid(), base.index()); #endif @@ -447,7 +447,7 @@ InodeIdentifier VFS::resolve_path(const String& path, InodeIdentifier base, int& if (options & O_NOFOLLOW_NOERROR) return crumb_id; } - crumb_id = resolveSymbolicLink(parent, crumb_id, error); + crumb_id = resolve_symbolic_link(parent, *crumb_inode, error); if (!crumb_id.is_valid()) { kprintf("Symbolic link resolution failed :(\n"); return { }; diff --git a/VirtualFileSystem/VirtualFileSystem.h b/VirtualFileSystem/VirtualFileSystem.h index d2874f5ed4..8ed1c66f61 100644 --- a/VirtualFileSystem/VirtualFileSystem.h +++ b/VirtualFileSystem/VirtualFileSystem.h @@ -135,7 +135,7 @@ private: void traverse_directory_inode(Inode&, Function); 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 allocateNode(); void freeNode(Vnode*);