Refactor: Replace usages of FixedArray with Vector.

This commit is contained in:
asynts 2020-09-07 11:53:54 +02:00 committed by Andreas Kling
parent 9c83d6ff46
commit ec1080b18a
9 changed files with 27 additions and 23 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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()

View file

@ -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;

View file

@ -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)

View file

@ -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 };

View file

@ -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;
}

View file

@ -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);
}

View file

@ -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: