From 8731682d0eca68b3dce60e713d5808829c3b5adb Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 8 Feb 2020 02:34:22 +0100 Subject: [PATCH] Kernel: Simplify FS::create_directory() a little bit None of the clients of this function actually used the returned Inode, so it can simply return a KResult instead. --- Kernel/FileSystem/DevPtsFS.cpp | 5 ++--- Kernel/FileSystem/DevPtsFS.h | 2 +- Kernel/FileSystem/Ext2FileSystem.cpp | 14 +++++++------- Kernel/FileSystem/Ext2FileSystem.h | 2 +- Kernel/FileSystem/FileSystem.h | 2 +- Kernel/FileSystem/ProcFS.cpp | 5 ++--- Kernel/FileSystem/ProcFS.h | 2 +- Kernel/FileSystem/TmpFS.cpp | 7 +++++-- Kernel/FileSystem/TmpFS.h | 2 +- Kernel/FileSystem/VirtualFileSystem.cpp | 6 +----- 10 files changed, 22 insertions(+), 25 deletions(-) diff --git a/Kernel/FileSystem/DevPtsFS.cpp b/Kernel/FileSystem/DevPtsFS.cpp index d7d618d77e6..8aef2c89600 100644 --- a/Kernel/FileSystem/DevPtsFS.cpp +++ b/Kernel/FileSystem/DevPtsFS.cpp @@ -83,10 +83,9 @@ RefPtr DevPtsFS::create_inode(InodeIdentifier, const String&, mode_t, off return nullptr; } -RefPtr DevPtsFS::create_directory(InodeIdentifier, const String&, mode_t, uid_t, gid_t, int& error) +KResult DevPtsFS::create_directory(InodeIdentifier, const String&, mode_t, uid_t, gid_t) { - error = -EROFS; - return nullptr; + return KResult(-EROFS); } RefPtr DevPtsFS::get_inode(InodeIdentifier inode_id) const diff --git a/Kernel/FileSystem/DevPtsFS.h b/Kernel/FileSystem/DevPtsFS.h index fd4a7bd35e6..a8ddc6cc58f 100644 --- a/Kernel/FileSystem/DevPtsFS.h +++ b/Kernel/FileSystem/DevPtsFS.h @@ -43,7 +43,7 @@ public: virtual InodeIdentifier root_inode() const override; virtual RefPtr create_inode(InodeIdentifier parent_inode, const String& name, mode_t, off_t size, dev_t, uid_t, gid_t, int& error) override; - virtual RefPtr create_directory(InodeIdentifier parent_inode, const String& name, mode_t, uid_t, gid_t, int& error) override; + virtual KResult create_directory(InodeIdentifier parent_inode, const String& name, mode_t, uid_t, gid_t) override; virtual RefPtr get_inode(InodeIdentifier) const override; static void register_slave_pty(SlavePTY&); diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp index b400d357584..309ff7167a2 100644 --- a/Kernel/FileSystem/Ext2FileSystem.cpp +++ b/Kernel/FileSystem/Ext2FileSystem.cpp @@ -1347,7 +1347,7 @@ bool Ext2FS::set_block_allocation_state(BlockIndex block_index, bool new_state) return true; } -RefPtr Ext2FS::create_directory(InodeIdentifier parent_id, const String& name, mode_t mode, uid_t uid, gid_t gid, int& error) +KResult Ext2FS::create_directory(InodeIdentifier parent_id, const String& name, mode_t mode, uid_t uid, gid_t gid) { LOCKER(m_lock); ASSERT(parent_id.fsid() == fsid()); @@ -1359,9 +1359,10 @@ RefPtr Ext2FS::create_directory(InodeIdentifier parent_id, const String& // NOTE: When creating a new directory, make the size 1 block. // There's probably a better strategy here, but this works for now. + int error; auto inode = create_inode(parent_id, name, mode, block_size(), 0, uid, gid, error); if (!inode) - return nullptr; + return KResult(error); #ifdef EXT2_DEBUG dbgprintf("Ext2FS: create_directory: created new directory named '%s' with inode %u\n", name.characters(), inode->identifier().index()); @@ -1375,9 +1376,9 @@ RefPtr Ext2FS::create_directory(InodeIdentifier parent_id, const String& ASSERT(success); auto parent_inode = get_inode(parent_id); - error = parent_inode->increment_link_count(); - if (error < 0) - return nullptr; + auto result = parent_inode->increment_link_count(); + if (result.is_error()) + return result; auto& bgd = const_cast(group_descriptor(group_index_from_inode(inode->identifier().index()))); ++bgd.bg_used_dirs_count; @@ -1387,8 +1388,7 @@ RefPtr Ext2FS::create_directory(InodeIdentifier parent_id, const String& m_block_group_descriptors_dirty = true; - error = 0; - return inode; + return KSuccess; } RefPtr Ext2FS::create_inode(InodeIdentifier parent_id, const String& name, mode_t mode, off_t size, dev_t dev, uid_t uid, gid_t gid, int& error) diff --git a/Kernel/FileSystem/Ext2FileSystem.h b/Kernel/FileSystem/Ext2FileSystem.h index 7b8168e11fb..dcc0c4de329 100644 --- a/Kernel/FileSystem/Ext2FileSystem.h +++ b/Kernel/FileSystem/Ext2FileSystem.h @@ -126,7 +126,7 @@ private: virtual const char* class_name() const override; virtual InodeIdentifier root_inode() const override; virtual RefPtr create_inode(InodeIdentifier parent_inode, const String& name, mode_t, off_t size, dev_t, uid_t, gid_t, int& error) override; - virtual RefPtr create_directory(InodeIdentifier parent_inode, const String& name, mode_t, uid_t, gid_t, int& error) override; + virtual KResult create_directory(InodeIdentifier parent_inode, const String& name, mode_t, uid_t, gid_t) override; virtual RefPtr get_inode(InodeIdentifier) const override; virtual void flush_writes() override; diff --git a/Kernel/FileSystem/FileSystem.h b/Kernel/FileSystem/FileSystem.h index 373f73241fe..7f9f6628d4c 100644 --- a/Kernel/FileSystem/FileSystem.h +++ b/Kernel/FileSystem/FileSystem.h @@ -85,7 +85,7 @@ public: }; virtual RefPtr create_inode(InodeIdentifier parent_inode, const String& name, mode_t, off_t size, dev_t, uid_t, gid_t, int& error) = 0; - virtual RefPtr create_directory(InodeIdentifier parent_inode, const String& name, mode_t, uid_t, gid_t, int& error) = 0; + virtual KResult create_directory(InodeIdentifier parent_inode, const String& name, mode_t, uid_t, gid_t) = 0; virtual RefPtr get_inode(InodeIdentifier) const = 0; diff --git a/Kernel/FileSystem/ProcFS.cpp b/Kernel/FileSystem/ProcFS.cpp index 90cc0f89664..201d0782e98 100644 --- a/Kernel/FileSystem/ProcFS.cpp +++ b/Kernel/FileSystem/ProcFS.cpp @@ -1041,10 +1041,9 @@ RefPtr ProcFS::create_inode(InodeIdentifier, const String&, mode_t, off_t return {}; } -RefPtr ProcFS::create_directory(InodeIdentifier, const String&, mode_t, uid_t, gid_t, int& error) +KResult ProcFS::create_directory(InodeIdentifier, const String&, mode_t, uid_t, gid_t) { - error = -EROFS; - return nullptr; + return KResult(-EROFS); } InodeIdentifier ProcFS::root_inode() const diff --git a/Kernel/FileSystem/ProcFS.h b/Kernel/FileSystem/ProcFS.h index c1cfe16750a..956d8a51335 100644 --- a/Kernel/FileSystem/ProcFS.h +++ b/Kernel/FileSystem/ProcFS.h @@ -50,7 +50,7 @@ public: virtual RefPtr get_inode(InodeIdentifier) const override; virtual RefPtr create_inode(InodeIdentifier parent_id, const String& name, mode_t, off_t size, dev_t, uid_t, gid_t, int& error) override; - virtual RefPtr create_directory(InodeIdentifier parent_id, const String& name, mode_t, uid_t, gid_t, int& error) override; + virtual KResult create_directory(InodeIdentifier parent_id, const String& name, mode_t, uid_t, gid_t) override; static void add_sys_bool(String&&, Lockable&, Function&& notify_callback = nullptr); static void add_sys_string(String&&, Lockable&, Function&& notify_callback = nullptr); diff --git a/Kernel/FileSystem/TmpFS.cpp b/Kernel/FileSystem/TmpFS.cpp index 02d70e7825e..ce401aaef69 100644 --- a/Kernel/FileSystem/TmpFS.cpp +++ b/Kernel/FileSystem/TmpFS.cpp @@ -117,12 +117,15 @@ RefPtr TmpFS::create_inode(InodeIdentifier parent_id, const String& name, return inode; } -RefPtr TmpFS::create_directory(InodeIdentifier parent_id, const String& name, mode_t mode, uid_t uid, gid_t gid, int& error) +KResult TmpFS::create_directory(InodeIdentifier parent_id, const String& name, mode_t mode, uid_t uid, gid_t gid) { // Ensure it's a directory. mode &= ~0170000; mode |= 0040000; - return create_inode(parent_id, name, mode, 0, 0, uid, gid, error); + int error; + if (!create_inode(parent_id, name, mode, 0, 0, uid, gid, error)) + return KResult(error); + return KSuccess; } TmpFSInode::TmpFSInode(TmpFS& fs, InodeMetadata metadata, InodeIdentifier parent) diff --git a/Kernel/FileSystem/TmpFS.h b/Kernel/FileSystem/TmpFS.h index f5e95181f86..fe6620ed1da 100644 --- a/Kernel/FileSystem/TmpFS.h +++ b/Kernel/FileSystem/TmpFS.h @@ -49,7 +49,7 @@ public: virtual RefPtr get_inode(InodeIdentifier) const override; virtual RefPtr create_inode(InodeIdentifier parent_id, const String& name, mode_t, off_t size, dev_t, uid_t, gid_t, int& error) override; - virtual RefPtr create_directory(InodeIdentifier parent_id, const String& name, mode_t, uid_t, gid_t, int& error) override; + virtual KResult create_directory(InodeIdentifier parent_id, const String& name, mode_t, uid_t, gid_t) override; private: TmpFS(); diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index c6e7fc94142..02e8930ddb2 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -355,11 +355,7 @@ KResult VFS::mkdir(StringView path, mode_t mode, Custody& base) #ifdef VFS_DEBUG dbg() << "VFS::mkdir: '" << p.basename() << "' in " << parent_inode.identifier(); #endif - int error; - auto new_dir = parent_inode.fs().create_directory(parent_inode.identifier(), p.basename(), mode, current->process().uid(), current->process().gid(), error); - if (new_dir) - return KSuccess; - return KResult(error); + return parent_inode.fs().create_directory(parent_inode.identifier(), p.basename(), mode, current->process().uid(), current->process().gid()); } KResult VFS::access(StringView path, int mode, Custody& base)