diff --git a/src/libc/string.c b/src/libc/string.c index 91f07f1..fdff71a 100644 --- a/src/libc/string.c +++ b/src/libc/string.c @@ -103,3 +103,32 @@ void strcat(char* dest, const char* src) *dest = '\0'; } + +size_t strnlen(const char* str, size_t max_len) +{ + size_t len = 0; + while (*str && len < max_len) + { + len++; + str++; + } + return len; +} + +void strncat(char* dest, const char* src, size_t n) +{ + while (*dest) + { + dest++; + } + + while (*src && n > 0) + { + *dest = *src; + dest++; + src++; + n--; + } + + *dest = '\0'; +} diff --git a/src/libc/string.h b/src/libc/string.h index 590d29a..509f5ba 100644 --- a/src/libc/string.h +++ b/src/libc/string.h @@ -12,4 +12,8 @@ char* strtok(char* str, const char* delimiter); int atoi(char* str); void strcat(char* dest, const char* src); +// Safer functions +size_t strnlen(const char* str, size_t max_len); +void strncat(char* dest, const char* src, size_t n); + #endif