diff options
Diffstat (limited to 'Private/DriverKit')
| -rw-r--r-- | Private/DriverKit/KernelStdCxx.cc | 24 | ||||
| -rw-r--r-- | Private/DriverKit/KernelString.c | 11 | ||||
| -rw-r--r-- | Private/DriverKit/KernelString.h | 3 |
3 files changed, 38 insertions, 0 deletions
diff --git a/Private/DriverKit/KernelStdCxx.cc b/Private/DriverKit/KernelStdCxx.cc new file mode 100644 index 00000000..79d41a72 --- /dev/null +++ b/Private/DriverKit/KernelStdCxx.cc @@ -0,0 +1,24 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + + Purpose: Driver C++ Definitions. + +------------------------------------------- */ + +#include <DriverKit/KernelStd.h> + +void* operator new(size_t sz) { + if (!sz) ++sz; + + auto ptr = kernelCall("NewKernelHeap", 1, sz); + kernelCall("KernelHeapProtect", 1, ptr); + + return ptr; +} + +void operator delete(void* ptr) noexcept { + if (!ptr) return; + + kernelCall("DeleteKernelHeap", 1,ptr); +} diff --git a/Private/DriverKit/KernelString.c b/Private/DriverKit/KernelString.c index 7c129dd4..0bb45b16 100644 --- a/Private/DriverKit/KernelString.c +++ b/Private/DriverKit/KernelString.c @@ -17,3 +17,14 @@ DK_EXTERN size_t kernelStringLength(const char* str) { return index; } + +DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len) { + size_t index = 0; + + while (index != len) { + dst[index] = src[index]; + ++index; + } + + return index; +} diff --git a/Private/DriverKit/KernelString.h b/Private/DriverKit/KernelString.h index d1b8ac93..8e189d26 100644 --- a/Private/DriverKit/KernelString.h +++ b/Private/DriverKit/KernelString.h @@ -10,4 +10,7 @@ #include <DriverKit/KernelStd.h> +/// @brief DriverKit equivalent of POSIX's string.h. + DK_EXTERN size_t kernelStringLength(const char* str); +DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len); |
