From fecc323112c23fdade315f008a828256892e3bc8 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 29 Dec 2024 20:01:56 +0100 Subject: IMPL: SwapDiskDelegate.h class and Swap API. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/SystemKit/Swap.h | 23 +++++++++-- dev/Kernel/src/System/SwapDiskDelegate.cc | 63 +++++++++++++------------------ 2 files changed, 45 insertions(+), 41 deletions(-) (limited to 'dev') diff --git a/dev/Kernel/SystemKit/Swap.h b/dev/Kernel/SystemKit/Swap.h index 5d9d1ade..4ba59bcb 100644 --- a/dev/Kernel/SystemKit/Swap.h +++ b/dev/Kernel/SystemKit/Swap.h @@ -8,11 +8,26 @@ #pragma once #include +#include -#define kSwapMgrBlockMaxSize mib_cast(16) -#define KSwapMgrBlockMagic "SWEP " - -#define kSwapMgrPageFile "/System/pagefile.sys" +#define kSwapMgrBlockMaxSize (mib_cast(16)) +#define kSwapMgrPageFile "/System/pagefile.sys" /// @file Swap.h /// @brief Virtual memory swap API. + +namespace Kernel +{ + /// @brief This class is a disk swap delegate for any data. available as a syscall too. + class SwapDiskDelegate final + { + public: + explicit SwapDiskDelegate() = default; + ~SwapDiskDelegate() = default; + + ZKA_COPY_DEFAULT(SwapDiskDelegate); + + BOOL Write(const Char* fork_name, const SizeT fork_name_len, VoidPtr data, const SizeT data_len); + VoidPtr Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len); + }; +} // namespace Kernel \ No newline at end of file diff --git a/dev/Kernel/src/System/SwapDiskDelegate.cc b/dev/Kernel/src/System/SwapDiskDelegate.cc index ffe8812d..96c1d465 100644 --- a/dev/Kernel/src/System/SwapDiskDelegate.cc +++ b/dev/Kernel/src/System/SwapDiskDelegate.cc @@ -7,51 +7,40 @@ #include #include -namespace Kernel::Detail +namespace Kernel { - class SwapDiskDelegate; - - class SwapDiskDelegate final + BOOL SwapDiskDelegate::Write(const Char* fork_name, const SizeT fork_name_len, VoidPtr data, const SizeT data_len) { - public: - explicit SwapDiskDelegate() = default; - ~SwapDiskDelegate() = default; - - ZKA_COPY_DEFAULT(SwapDiskDelegate); - - BOOL Write(const Char* fork_name, const SizeT fork_name_len, VoidPtr data, const SizeT data_len) - { - if (!fork_name || !fork_name_len) - return NO; - - if (data_len > mib_cast(16)) - return NO; + if (!fork_name || !fork_name_len) + return NO; - if (!data) - return NO; + if (data_len > kSwapMgrBlockMaxSize) + return NO; - FileStream file(kSwapMgrPageFile, "wb"); + if (!data) + return NO; - if (file.Write(fork_name, data, data_len).Error()) - { - return NO; - } + FileStream file(kSwapMgrPageFile, "wb"); - return YES; + if (file.Write(fork_name, data, data_len).Error()) + { + return NO; } - VoidPtr Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len) - { - if (!fork_name || !fork_name_len) - return nullptr; + return YES; + } - if (data_len > mib_cast(16)) - return nullptr; + VoidPtr SwapDiskDelegate::Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len) + { + if (!fork_name || !fork_name_len) + return nullptr; - FileStream file(kSwapMgrPageFile, "rb"); + if (data_len > mib_cast(16)) + return nullptr; - voidPtr blob = file.Read(fork_name, data_len); - return blob; - } - }; -} // namespace Kernel::Detail \ No newline at end of file + FileStream file(kSwapMgrPageFile, "rb"); + + voidPtr blob = file.Read(fork_name, data_len); + return blob; + } +} // namespace Kernel \ No newline at end of file -- cgit v1.2.3