mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 01:37:39 +03:00
Kernel: Add an API for turning a UserOrKernelBuffer into a KString
This commit is contained in:
parent
dd37d0a327
commit
cd4d73e19e
Notes:
sideshowbarker
2024-07-18 08:51:27 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/cd4d73e19ee
@ -29,6 +29,26 @@ String UserOrKernelBuffer::copy_into_string(size_t size) const
|
||||
return String(ReadonlyBytes { m_buffer, size });
|
||||
}
|
||||
|
||||
KResultOr<NonnullOwnPtr<KString>> UserOrKernelBuffer::try_copy_into_kstring(size_t size) const
|
||||
{
|
||||
if (!m_buffer)
|
||||
return EINVAL;
|
||||
if (is_user_address(VirtualAddress(m_buffer))) {
|
||||
char* buffer;
|
||||
auto kstring = KString::try_create_uninitialized(size, buffer);
|
||||
if (!kstring)
|
||||
return ENOMEM;
|
||||
if (!copy_from_user(buffer, m_buffer, size))
|
||||
return EFAULT;
|
||||
return kstring.release_nonnull();
|
||||
}
|
||||
|
||||
auto kstring = KString::try_create(ReadonlyBytes { m_buffer, size });
|
||||
if (!kstring)
|
||||
return ENOMEM;
|
||||
return kstring.release_nonnull();
|
||||
}
|
||||
|
||||
bool UserOrKernelBuffer::write(const void* src, size_t offset, size_t len)
|
||||
{
|
||||
if (!m_buffer)
|
||||
|
@ -55,6 +55,7 @@ public:
|
||||
}
|
||||
|
||||
[[nodiscard]] String copy_into_string(size_t size) const;
|
||||
[[nodiscard]] KResultOr<NonnullOwnPtr<KString>> try_copy_into_kstring(size_t) const;
|
||||
[[nodiscard]] bool write(const void* src, size_t offset, size_t len);
|
||||
[[nodiscard]] bool write(const void* src, size_t len)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user