Pārlūkot izejas kodu

Refactor: Replace usages of FixedArray with Vector.

asynts 4 gadi atpakaļ
vecāks
revīzija
ec1080b18a

+ 9 - 0
AK/Span.h

@@ -174,6 +174,15 @@ public:
         }
     }
 
+    bool contains_slow(const T& value) const
+    {
+        for (size_t i = 0; i < size(); ++i) {
+            if (at(i) == value)
+                return true;
+        }
+        return false;
+    }
+
     ALWAYS_INLINE const T& at(size_t index) const
     {
         ASSERT(index < this->m_size);

+ 7 - 7
Kernel/FileSystem/InodeMetadata.h

@@ -26,7 +26,7 @@
 
 #pragma once
 
-#include <AK/FixedArray.h>
+#include <AK/Span.h>
 #include <Kernel/FileSystem/InodeIdentifier.h>
 #include <Kernel/KResult.h>
 #include <Kernel/UnixTypes.h>
@@ -58,35 +58,35 @@ struct InodeMetadata {
     bool may_write(const Process&) const;
     bool may_execute(const Process&) const;
 
-    bool may_read(uid_t u, gid_t g, const FixedArray<gid_t>& eg) const
+    bool may_read(uid_t u, gid_t g, Span<const gid_t> eg) const
     {
         if (u == 0)
             return true;
         if (uid == u)
             return mode & S_IRUSR;
-        if (gid == g || eg.contains(gid))
+        if (gid == g || eg.contains_slow(gid))
             return mode & S_IRGRP;
         return mode & S_IROTH;
     }
 
-    bool may_write(uid_t u, gid_t g, const FixedArray<gid_t>& eg) const
+    bool may_write(uid_t u, gid_t g, Span<const gid_t> eg) const
     {
         if (u == 0)
             return true;
         if (uid == u)
             return mode & S_IWUSR;
-        if (gid == g || eg.contains(gid))
+        if (gid == g || eg.contains_slow(gid))
             return mode & S_IWGRP;
         return mode & S_IWOTH;
     }
 
-    bool may_execute(uid_t u, gid_t g, const FixedArray<gid_t>& eg) const
+    bool may_execute(uid_t u, gid_t g, Span<const gid_t> eg) const
     {
         if (u == 0)
             return true;
         if (uid == u)
             return mode & S_IXUSR;
-        if (gid == g || eg.contains(gid))
+        if (gid == g || eg.contains_slow(gid))
             return mode & S_IXGRP;
         return mode & S_IXOTH;
     }

+ 1 - 0
Kernel/Interrupts/InterruptManagement.cpp

@@ -137,6 +137,7 @@ PhysicalAddress InterruptManagement::search_for_madt()
 InterruptManagement::InterruptManagement()
     : m_madt(search_for_madt())
 {
+    m_interrupt_controllers.resize(1);
 }
 
 void InterruptManagement::switch_to_pic_mode()

+ 1 - 2
Kernel/Interrupts/InterruptManagement.h

@@ -26,7 +26,6 @@
 
 #pragma once
 
-#include <AK/FixedArray.h>
 #include <AK/Function.h>
 #include <AK/NonnullOwnPtr.h>
 #include <AK/OwnPtr.h>
@@ -89,7 +88,7 @@ private:
     PhysicalAddress search_for_madt();
     void locate_apic_data();
     bool m_smp_enabled { false };
-    FixedArray<RefPtr<IRQController>> m_interrupt_controllers { 1 };
+    Vector<RefPtr<IRQController>> m_interrupt_controllers;
     Vector<ISAInterruptOverrideMetadata> m_isa_interrupt_overrides;
     Vector<PCIInterruptOverrideMetadata> m_pci_interrupt_overrides;
     PhysicalAddress m_madt;

+ 1 - 1
Kernel/Process.cpp

@@ -142,7 +142,7 @@ NonnullRefPtrVector<Process> Process::all_processes()
 
 bool Process::in_group(gid_t gid) const
 {
-    return m_gid == gid || m_extra_gids.contains(gid);
+    return m_gid == gid || m_extra_gids.contains_slow(gid);
 }
 
 Range Process::allocate_range(VirtualAddress vaddr, size_t size, size_t alignment)

+ 2 - 3
Kernel/Process.h

@@ -27,7 +27,6 @@
 #pragma once
 
 #include <AK/Checked.h>
-#include <AK/FixedArray.h>
 #include <AK/HashMap.h>
 #include <AK/InlineLinkedList.h>
 #include <AK/NonnullOwnPtrVector.h>
@@ -162,7 +161,7 @@ public:
     bool is_session_leader() const { return m_sid.value() == m_pid.value(); }
     ProcessGroupID pgid() const { return m_pg ? m_pg->pgid() : 0; }
     bool is_group_leader() const { return pgid().value() == m_pid.value(); }
-    const FixedArray<gid_t>& extra_gids() const { return m_extra_gids; }
+    Span<const gid_t> extra_gids() const { return m_extra_gids; }
     uid_t euid() const { return m_euid; }
     gid_t egid() const { return m_egid; }
     uid_t uid() const { return m_uid; }
@@ -683,7 +682,7 @@ private:
     ProcessID m_ppid { 0 };
     mode_t m_umask { 022 };
 
-    FixedArray<gid_t> m_extra_gids;
+    Vector<gid_t> m_extra_gids;
 
     WeakPtr<Region> m_master_tls_region;
     size_t m_master_tls_size { 0 };

+ 1 - 5
Kernel/Syscalls/getuid.cpp

@@ -86,11 +86,7 @@ int Process::sys$getgroups(ssize_t count, Userspace<gid_t*> user_gids)
     if (!validate_write_typed(user_gids, m_extra_gids.size()))
         return -EFAULT;
 
-    Vector<gid_t> gids;
-    for (auto gid : m_extra_gids)
-        gids.append(gid);
-
-    copy_to_user(user_gids, gids.data(), sizeof(gid_t) * count);
+    copy_to_user(user_gids, m_extra_gids.data(), sizeof(gid_t) * count);
     return 0;
 }
 

+ 1 - 1
Kernel/VM/VMObject.cpp

@@ -38,8 +38,8 @@ VMObject::VMObject(const VMObject& other)
 }
 
 VMObject::VMObject(size_t size)
-    : m_physical_pages(ceil_div(size, PAGE_SIZE))
 {
+    m_physical_pages.resize(ceil_div(size, PAGE_SIZE));
     MM.register_vmobject(*this);
 }
 

+ 4 - 4
Kernel/VM/VMObject.h

@@ -26,11 +26,11 @@
 
 #pragma once
 
-#include <AK/FixedArray.h>
 #include <AK/InlineLinkedList.h>
 #include <AK/RefCounted.h>
 #include <AK/RefPtr.h>
 #include <AK/TypeCasts.h>
+#include <AK/Vector.h>
 #include <AK/Weakable.h>
 #include <Kernel/Lock.h>
 
@@ -58,8 +58,8 @@ public:
     virtual bool is_contiguous() const { return false; }
 
     size_t page_count() const { return m_physical_pages.size(); }
-    const FixedArray<RefPtr<PhysicalPage>>& physical_pages() const { return m_physical_pages; }
-    FixedArray<RefPtr<PhysicalPage>>& physical_pages() { return m_physical_pages; }
+    const Vector<RefPtr<PhysicalPage>>& physical_pages() const { return m_physical_pages; }
+    Vector<RefPtr<PhysicalPage>>& physical_pages() { return m_physical_pages; }
 
     size_t size() const { return m_physical_pages.size() * PAGE_SIZE; }
 
@@ -76,7 +76,7 @@ protected:
     template<typename Callback>
     void for_each_region(Callback);
 
-    FixedArray<RefPtr<PhysicalPage>> m_physical_pages;
+    Vector<RefPtr<PhysicalPage>> m_physical_pages;
     Lock m_paging_lock { "VMObject" };
 
 private: