mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-15 15:42:52 +00:00
Everywhere: Move global Kernel pattern code to Kernel/Library directory
This has KString, KBuffer, DoubleBuffer, KBufferBuilder, IOWindow, UserOrKernelBuffer and ScopedCritical classes being moved to the Kernel/Library subdirectory. Also, move the panic and assertions handling code to that directory.
This commit is contained in:
parent
f1cbfc5a6e
commit
7c0540a229
Notes:
sideshowbarker
2024-07-17 00:53:02 +09:00
Author: https://github.com/supercomputer7
Commit: 7c0540a229
Pull-request: https://github.com/SerenityOS/serenity/pull/17604
Reviewed-by: https://github.com/gmta ✅
Reviewed-by: https://github.com/kleinesfilmroellchen ✅
193 changed files with 238 additions and 240 deletions
68
Kernel/Library/UserOrKernelBuffer.cpp
Normal file
68
Kernel/Library/UserOrKernelBuffer.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright (c) 2020, the SerenityOS developers.
|
||||
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <Kernel/Library/UserOrKernelBuffer.h>
|
||||
#include <Kernel/Memory/MemoryManager.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
bool UserOrKernelBuffer::is_kernel_buffer() const
|
||||
{
|
||||
return !Memory::is_user_address(VirtualAddress(m_buffer));
|
||||
}
|
||||
|
||||
ErrorOr<NonnullOwnPtr<KString>> UserOrKernelBuffer::try_copy_into_kstring(size_t size) const
|
||||
{
|
||||
if (!m_buffer)
|
||||
return EINVAL;
|
||||
if (Memory::is_user_address(VirtualAddress(m_buffer))) {
|
||||
char* buffer;
|
||||
auto kstring = TRY(KString::try_create_uninitialized(size, buffer));
|
||||
TRY(copy_from_user(buffer, m_buffer, size));
|
||||
return kstring;
|
||||
}
|
||||
|
||||
return KString::try_create(ReadonlyBytes { m_buffer, size });
|
||||
}
|
||||
|
||||
ErrorOr<void> UserOrKernelBuffer::write(void const* src, size_t offset, size_t len)
|
||||
{
|
||||
if (!m_buffer)
|
||||
return EFAULT;
|
||||
|
||||
if (Memory::is_user_address(VirtualAddress(m_buffer)))
|
||||
return copy_to_user(m_buffer + offset, src, len);
|
||||
|
||||
memcpy(m_buffer + offset, src, len);
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> UserOrKernelBuffer::read(void* dest, size_t offset, size_t len) const
|
||||
{
|
||||
if (!m_buffer)
|
||||
return EFAULT;
|
||||
|
||||
if (Memory::is_user_address(VirtualAddress(m_buffer)))
|
||||
return copy_from_user(dest, m_buffer + offset, len);
|
||||
|
||||
memcpy(dest, m_buffer + offset, len);
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> UserOrKernelBuffer::memset(int value, size_t offset, size_t len)
|
||||
{
|
||||
if (!m_buffer)
|
||||
return EFAULT;
|
||||
|
||||
if (Memory::is_user_address(VirtualAddress(m_buffer)))
|
||||
return memset_user(m_buffer + offset, value, len);
|
||||
|
||||
::memset(m_buffer + offset, value, len);
|
||||
return {};
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue