diff options
Diffstat (limited to 'dev/Kernel/src/System/SwapDiskDelegate.cc')
| -rw-r--r-- | dev/Kernel/src/System/SwapDiskDelegate.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/dev/Kernel/src/System/SwapDiskDelegate.cc b/dev/Kernel/src/System/SwapDiskDelegate.cc new file mode 100644 index 00000000..ffe8812d --- /dev/null +++ b/dev/Kernel/src/System/SwapDiskDelegate.cc @@ -0,0 +1,57 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Corp, all rights reserved. + +------------------------------------------- */ + +#include <SystemKit/Swap.h> +#include <KernelKit/FileMgr.h> + +namespace Kernel::Detail +{ + class SwapDiskDelegate; + + 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) + { + if (!fork_name || !fork_name_len) + return NO; + + if (data_len > mib_cast(16)) + return NO; + + if (!data) + return NO; + + FileStream file(kSwapMgrPageFile, "wb"); + + if (file.Write(fork_name, data, data_len).Error()) + { + return NO; + } + + return YES; + } + + VoidPtr Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len) + { + if (!fork_name || !fork_name_len) + return nullptr; + + if (data_len > mib_cast(16)) + return nullptr; + + FileStream file(kSwapMgrPageFile, "rb"); + + voidPtr blob = file.Read(fork_name, data_len); + return blob; + } + }; +} // namespace Kernel::Detail
\ No newline at end of file |
