From 62bf2eef72854750c7325d2e2c6e92562a522e16 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Mon, 2 Mar 2026 23:43:09 +0100 Subject: implement memcpy --- libs/kstd/src/libc/stdlib.cpp | 36 ++++++------- libs/kstd/src/libc/string.cpp | 116 +++++++++++++++++++++++------------------- 2 files changed, 82 insertions(+), 70 deletions(-) (limited to 'libs/kstd/src/libc') diff --git a/libs/kstd/src/libc/stdlib.cpp b/libs/kstd/src/libc/stdlib.cpp index 4a5c91f..bb40605 100644 --- a/libs/kstd/src/libc/stdlib.cpp +++ b/libs/kstd/src/libc/stdlib.cpp @@ -1,19 +1,19 @@ -#include "kstd/os/error.hpp" - -namespace kstd::libc -{ - - extern "C" - { - [[noreturn]] auto abort() -> void - { - kstd::os::abort(); - } - - [[noreturn, gnu::weak]] auto free(void *) -> void - { - kstd::os::panic("Tried to call free."); - } - } - +#include "kstd/os/error.hpp" + +namespace kstd::libc +{ + + extern "C" + { + [[noreturn]] auto abort() -> void + { + kstd::os::abort(); + } + + [[noreturn, gnu::weak]] auto free(void *) -> void + { + kstd::os::panic("Tried to call free."); + } + } + } // namespace kstd::libc \ No newline at end of file diff --git a/libs/kstd/src/libc/string.cpp b/libs/kstd/src/libc/string.cpp index b7d4c6b..4e264f9 100644 --- a/libs/kstd/src/libc/string.cpp +++ b/libs/kstd/src/libc/string.cpp @@ -1,53 +1,65 @@ -#include -#include -#include -#include -#include - -namespace kstd::libc -{ - - extern "C" - { - auto strlen(char const * string) -> std::size_t - { - return std::distance(string, std::ranges::find(string, nullptr, '\0')); - } - - auto memcmp(void const * lhs, void const * rhs, std::size_t size) -> std::size_t - { - auto left_span = std::span{static_cast(lhs), size}; - auto right_span = std::span{static_cast(rhs), size}; - auto mismatched = std::ranges::mismatch(left_span, right_span); - - if (mismatched.in1 == left_span.end()) - { - return 0; - } - - return std::bit_cast(*mismatched.in1) - std::bit_cast(*mismatched.in2); - } - - auto memmove(void * dest, void const * src, std::size_t size) -> void * - { - auto dest_span = std::span{static_cast(dest), size}; - auto src_span = std::span{static_cast(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; - } - } - +#include + +#include +#include +#include +#include +#include + +namespace kstd::libc +{ + + auto memcpy(void * dest, void const * src, std::size_t size) -> void * + { + auto dest_span = std::span{static_cast(dest), size}; + auto src_span = std::span{static_cast(src), size}; + + for (std::size_t i = 0; i < size; ++i) + { + dest_span[i] = src_span[i]; + } + + return dest; + } + + auto strlen(char const * string) -> std::size_t + { + return std::distance(string, std::ranges::find(string, nullptr, '\0')); + } + + auto memcmp(void const * lhs, void const * rhs, std::size_t size) -> std::size_t + { + auto left_span = std::span{static_cast(lhs), size}; + auto right_span = std::span{static_cast(rhs), size}; + auto mismatched = std::ranges::mismatch(left_span, right_span); + + if (mismatched.in1 == left_span.end()) + { + return 0; + } + + return std::bit_cast(*mismatched.in1) - std::bit_cast(*mismatched.in2); + } + + auto memmove(void * dest, void const * src, std::size_t size) -> void * + { + auto dest_span = std::span{static_cast(dest), size}; + auto src_span = std::span{static_cast(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 -- cgit v1.2.3 From f25b3c3cb5fd1e00521b91d575da0177dbb44ddc Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 3 Mar 2026 13:53:47 +0100 Subject: implement memset --- libs/kstd/src/libc/string.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'libs/kstd/src/libc') diff --git a/libs/kstd/src/libc/string.cpp b/libs/kstd/src/libc/string.cpp index 4e264f9..302046d 100644 --- a/libs/kstd/src/libc/string.cpp +++ b/libs/kstd/src/libc/string.cpp @@ -22,9 +22,16 @@ namespace kstd::libc return dest; } - auto strlen(char const * string) -> std::size_t + auto memset(void * dest, std::byte value, std::size_t size) -> void * { - return std::distance(string, std::ranges::find(string, nullptr, '\0')); + auto dest_span = std::span{static_cast(dest), size}; + + for (std::size_t i = 0; i < size; ++i) + { + dest_span[i] = value; + } + + return dest; } auto memcmp(void const * lhs, void const * rhs, std::size_t size) -> std::size_t @@ -62,4 +69,9 @@ namespace kstd::libc return dest; } + auto strlen(char const * string) -> std::size_t + { + return std::distance(string, std::ranges::find(string, nullptr, '\0')); + } + } // namespace kstd::libc \ No newline at end of file -- cgit v1.2.3 From fe0aadec94834b72f4511ce5e300b9fb22e66e60 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 3 Mar 2026 13:57:33 +0100 Subject: small refactoring --- libs/kstd/src/libc/string.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libs/kstd/src/libc') diff --git a/libs/kstd/src/libc/string.cpp b/libs/kstd/src/libc/string.cpp index 302046d..63f012c 100644 --- a/libs/kstd/src/libc/string.cpp +++ b/libs/kstd/src/libc/string.cpp @@ -22,13 +22,14 @@ namespace kstd::libc return dest; } - auto memset(void * dest, std::byte value, std::size_t size) -> void * + auto memset(void * dest, int value, std::size_t size) -> void * { + auto const byte_value = static_cast(static_cast(value)); auto dest_span = std::span{static_cast(dest), size}; for (std::size_t i = 0; i < size; ++i) { - dest_span[i] = value; + dest_span[i] = byte_value; } return dest; -- cgit v1.2.3 From 38bdee2ba829999862e37999dc212055ebedc4c6 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 1 Apr 2026 15:52:43 +0200 Subject: kstd: fix signatures of libc functions --- libs/kstd/src/libc/string.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libs/kstd/src/libc') diff --git a/libs/kstd/src/libc/string.cpp b/libs/kstd/src/libc/string.cpp index 63f012c..c9fada1 100644 --- a/libs/kstd/src/libc/string.cpp +++ b/libs/kstd/src/libc/string.cpp @@ -9,7 +9,7 @@ namespace kstd::libc { - auto memcpy(void * dest, void const * src, std::size_t size) -> void * + auto memcpy(void * dest, void const * src, std::size_t size) noexcept -> void * { auto dest_span = std::span{static_cast(dest), size}; auto src_span = std::span{static_cast(src), size}; @@ -22,7 +22,7 @@ namespace kstd::libc return dest; } - auto memset(void * dest, int value, std::size_t size) -> void * + auto memset(void * dest, int value, std::size_t size) noexcept -> void * { auto const byte_value = static_cast(static_cast(value)); auto dest_span = std::span{static_cast(dest), size}; @@ -35,7 +35,7 @@ namespace kstd::libc return dest; } - auto memcmp(void const * lhs, void const * rhs, std::size_t size) -> std::size_t + auto memcmp(void const * lhs, void const * rhs, std::size_t size) noexcept -> int { auto left_span = std::span{static_cast(lhs), size}; auto right_span = std::span{static_cast(rhs), size}; @@ -49,7 +49,7 @@ namespace kstd::libc return std::bit_cast(*mismatched.in1) - std::bit_cast(*mismatched.in2); } - auto memmove(void * dest, void const * src, std::size_t size) -> void * + auto memmove(void * dest, void const * src, std::size_t size) noexcept -> void * { auto dest_span = std::span{static_cast(dest), size}; auto src_span = std::span{static_cast(src), size}; @@ -70,7 +70,7 @@ namespace kstd::libc return dest; } - auto strlen(char const * string) -> std::size_t + auto strlen(char const * string) noexcept -> std::size_t { return std::distance(string, std::ranges::find(string, nullptr, '\0')); } -- cgit v1.2.3 From f6f10575f75ac23d06e1d94f7861611503daa7af Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 23 Apr 2026 14:03:28 +0200 Subject: chore: banish relative includes --- libs/kstd/src/libc/stdlib.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libs/kstd/src/libc') diff --git a/libs/kstd/src/libc/stdlib.cpp b/libs/kstd/src/libc/stdlib.cpp index bb40605..a18fed0 100644 --- a/libs/kstd/src/libc/stdlib.cpp +++ b/libs/kstd/src/libc/stdlib.cpp @@ -1,4 +1,4 @@ -#include "kstd/os/error.hpp" +#include namespace kstd::libc { -- cgit v1.2.3 From 3ab0a15fb6aba0ad9516da69589b9da8dbd63a8e Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sat, 2 May 2026 17:12:21 +0200 Subject: libs: adopt p1204 layout for kstd --- libs/kstd/src/libc/stdlib.cpp | 19 ----------- libs/kstd/src/libc/string.cpp | 78 ------------------------------------------- 2 files changed, 97 deletions(-) delete mode 100644 libs/kstd/src/libc/stdlib.cpp delete mode 100644 libs/kstd/src/libc/string.cpp (limited to 'libs/kstd/src/libc') diff --git a/libs/kstd/src/libc/stdlib.cpp b/libs/kstd/src/libc/stdlib.cpp deleted file mode 100644 index a18fed0..0000000 --- a/libs/kstd/src/libc/stdlib.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -namespace kstd::libc -{ - - extern "C" - { - [[noreturn]] auto abort() -> void - { - kstd::os::abort(); - } - - [[noreturn, gnu::weak]] auto free(void *) -> void - { - kstd::os::panic("Tried to call free."); - } - } - -} // namespace kstd::libc \ No newline at end of file diff --git a/libs/kstd/src/libc/string.cpp b/libs/kstd/src/libc/string.cpp deleted file mode 100644 index c9fada1..0000000 --- a/libs/kstd/src/libc/string.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include - -#include -#include -#include -#include -#include - -namespace kstd::libc -{ - - auto memcpy(void * dest, void const * src, std::size_t size) noexcept -> void * - { - auto dest_span = std::span{static_cast(dest), size}; - auto src_span = std::span{static_cast(src), size}; - - for (std::size_t i = 0; i < size; ++i) - { - dest_span[i] = src_span[i]; - } - - return dest; - } - - auto memset(void * dest, int value, std::size_t size) noexcept -> void * - { - auto const byte_value = static_cast(static_cast(value)); - auto dest_span = std::span{static_cast(dest), size}; - - for (std::size_t i = 0; i < size; ++i) - { - dest_span[i] = byte_value; - } - - return dest; - } - - auto memcmp(void const * lhs, void const * rhs, std::size_t size) noexcept -> int - { - auto left_span = std::span{static_cast(lhs), size}; - auto right_span = std::span{static_cast(rhs), size}; - auto mismatched = std::ranges::mismatch(left_span, right_span); - - if (mismatched.in1 == left_span.end()) - { - return 0; - } - - return std::bit_cast(*mismatched.in1) - std::bit_cast(*mismatched.in2); - } - - auto memmove(void * dest, void const * src, std::size_t size) noexcept -> void * - { - auto dest_span = std::span{static_cast(dest), size}; - auto src_span = std::span{static_cast(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; - } - - auto strlen(char const * string) noexcept -> std::size_t - { - return std::distance(string, std::ranges::find(string, nullptr, '\0')); - } - -} // namespace kstd::libc \ No newline at end of file -- cgit v1.2.3