diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-06-22 21:41:15 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-06-22 21:41:15 +0200 |
| commit | 41703b62f9e7e83fa856fbf53101edc889502c45 (patch) | |
| tree | 96079f607134642cae1b6c79b1da70135c1bf5d6 /dev/boot/src | |
| parent | 7c63269be0c40d8b6169d3cacf487ab370206f60 (diff) | |
feat: use FNV in libSystem's syscall routing.
fix: Add legacy string.h functions back, for GCC.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/boot/src')
| -rw-r--r-- | dev/boot/src/BootSupport.cc | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/dev/boot/src/BootSupport.cc b/dev/boot/src/BootSupport.cc index 7cf7af95..96c6594e 100644 --- a/dev/boot/src/BootSupport.cc +++ b/dev/boot/src/BootSupport.cc @@ -18,7 +18,7 @@ /// @param dst destination pointer. /// @param byte value to fill in. /// @param len length of of src. -EXTERN_C VoidPtr memset(void* dst, int byte, long long unsigned int len, long long unsigned int dst_size) { +EXTERN_C VoidPtr memnset(void* dst, int byte, long long unsigned int len, long long unsigned int dst_size) { if (!dst || len > dst_size) { // For now, we return nullptr or an error status. return nullptr; @@ -35,7 +35,7 @@ EXTERN_C VoidPtr memset(void* dst, int byte, long long unsigned int len, long lo /// @param dst destination pointer. /// @param src source pointer. /// @param len length of of src. -EXTERN_C VoidPtr memcpy(void* dst, const void* src, long long unsigned int len, long long unsigned int dst_size) { +EXTERN_C VoidPtr memncpy(void* dst, const void* src, long long unsigned int len, long long unsigned int dst_size) { if (!dst || !src || len > dst_size) { // Similar to memset, this is a critical failure. return nullptr; @@ -49,7 +49,7 @@ EXTERN_C VoidPtr memcpy(void* dst, const void* src, long long unsigned int len, } /// @brief strlen definition in C++. -EXTERN_C size_t strlen(const char* whatToCheck, size_t max_len) { +EXTERN_C size_t strnlen(const char* whatToCheck, size_t max_len) { size_t len = 0; while (len < max_len && whatToCheck[len] != '\0') { ++len; @@ -58,7 +58,7 @@ EXTERN_C size_t strlen(const char* whatToCheck, size_t max_len) { } /// @brief strcmp definition in C++. -EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight, size_t max_len) { +EXTERN_C int strncmp(const char* whatToCheck, const char* whatToCheckRight, size_t max_len) { size_t i = 0; while (i < max_len && whatToCheck[i] == whatToCheckRight[i]) { if (whatToCheck[i] == '\0') return 0; @@ -73,4 +73,54 @@ EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight, size_ /// @brief something specific to the Microsoft's ABI, When the stack grows too big. EXTERN_C void ___chkstk_ms(void) {} +/// @note GCC expects them to be here. + +/// @brief memset definition in C++. +/// @param dst destination pointer. +/// @param byte value to fill in. +/// @param len length of of src. +EXTERN_C VoidPtr memset(void* dst, int byte, long long unsigned int len) { + for (size_t i = 0UL; i < len; ++i) { + ((int*) dst)[i] = byte; + } + + return dst; +} + +/// @brief memcpy definition in C++. +/// @param dst destination pointer. +/// @param src source pointer. +/// @param len length of of src. +EXTERN_C VoidPtr memcpy(void* dst, const void* src, long long unsigned int len) { + for (size_t i = 0UL; i < len; ++i) { + ((int*) dst)[i] = ((int*) src)[i]; + } + + return dst; +} + +/// @brief strlen definition in C++. +EXTERN_C size_t strlen(const char* whatToCheck) { + SizeT len = 0; + + while (whatToCheck[len] != 0) { + ++len; + } + + return len; +} + +/// @brief strcmp definition in C++. +EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight) { + SizeT len = 0; + + while (whatToCheck[len] == whatToCheckRight[len]) { + if (whatToCheck[len] == 0) return 0; + + ++len; + } + + return len; +} + #endif |
