summaryrefslogtreecommitdiffhomepage
path: root/dev/boot/src/BootSupport.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-06-22 21:41:15 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-06-22 21:41:15 +0200
commit41703b62f9e7e83fa856fbf53101edc889502c45 (patch)
tree96079f607134642cae1b6c79b1da70135c1bf5d6 /dev/boot/src/BootSupport.cc
parent7c63269be0c40d8b6169d3cacf487ab370206f60 (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/BootSupport.cc')
-rw-r--r--dev/boot/src/BootSupport.cc58
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