diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-12-23 20:00:46 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-12-23 20:00:46 +0100 |
| commit | 57ab6985b524ee5d45cd2471fa3af0917d93da34 (patch) | |
| tree | 7384cd2f9a678e5ddea721a4ce81426f1ee50124 /libs | |
| parent | d8f1841846b015fdbee8921ea0378ef455c1a4bd (diff) | |
| download | teachos-57ab6985b524ee5d45cd2471fa3af0917d93da34.tar.xz teachos-57ab6985b524ee5d45cd2471fa3af0917d93da34.zip | |
kstd/libc: implement basic memmove
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/kstd/src/libc/string.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libs/kstd/src/libc/string.cpp b/libs/kstd/src/libc/string.cpp index 319f6fd..b7d4c6b 100644 --- a/libs/kstd/src/libc/string.cpp +++ b/libs/kstd/src/libc/string.cpp @@ -27,6 +27,27 @@ namespace kstd::libc return std::bit_cast<char>(*mismatched.in1) - std::bit_cast<char>(*mismatched.in2); } + + auto memmove(void * dest, void const * src, std::size_t size) -> void * + { + auto dest_span = std::span{static_cast<std::byte *>(dest), size}; + auto src_span = std::span{static_cast<std::byte const *>(src), size}; + if (dest < src) + { + for (std::size_t i = 0; i < size; ++i) + { + dest_span[i] = src_span[i]; + } + } + else + { + for (std::size_t i = size; i > 0; --i) + { + dest_span[i - 1] = src_span[i - 1]; + } + } + return dest; + } } } // namespace kstd::libc
\ No newline at end of file |
