From 45abf9418bcfc08d4675c1415bd784574c90dc7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borna=20=C5=A0o=C5=A1tari=C4=87?= Date: Wed, 28 Jan 2026 21:53:55 +0100 Subject: [PATCH 1/3] fix formatting in klibc/string.h --- klibc/include/string.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/klibc/include/string.h b/klibc/include/string.h index 4f01fc1..ab46b28 100644 --- a/klibc/include/string.h +++ b/klibc/include/string.h @@ -3,12 +3,12 @@ #include -extern int memcmp(const void* s1, const void* s2, size_t n); -extern void* memmove(void* dst, const void* src, size_t n); -extern void* memcpy(void* dst, const void* src, size_t n); -extern void* memset(void* dst, int c, size_t n); +extern int memcmp(const void *s1, const void *s2, size_t n); +extern void *memmove(void *dst, const void *src, size_t n); +extern void *memcpy(void *dst, const void *src, size_t n); +extern void *memset(void *dst, int c, size_t n); -extern size_t strlen(const char* s); -extern int strcmp(const char* s1, const char* s2); +extern size_t strlen(const char *s); +extern int strcmp(const char *s1, const char *s2); #endif // CLASSICOS_KLIBC_STRING_H From 9d394d984b820ad5379f708f54e68e16ced69998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borna=20=C5=A0o=C5=A1tari=C4=87?= Date: Wed, 28 Jan 2026 21:54:28 +0100 Subject: [PATCH 2/3] fix formatting in klibc/string.c --- klibc/src/string.c | 51 +++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/klibc/src/string.c b/klibc/src/string.c index a9a8a84..f5a4c58 100644 --- a/klibc/src/string.c +++ b/klibc/src/string.c @@ -1,8 +1,8 @@ #include -int memcmp(const void* s1, const void* s2, size_t n) { - const unsigned char* c1 = s1; - const unsigned char* c2 = s2; +int memcmp(const void *s1, const void *s2, size_t n) { + const unsigned char *c1 = s1; + const unsigned char *c2 = s2; int d = 0; while (n--) { @@ -13,9 +13,9 @@ int memcmp(const void* s1, const void* s2, size_t n) { return d; } -void* memmove(void* dst, const void* src, size_t n) { - const char* p = src; - char* q = dst; +void *memmove(void *dst, const void *src, size_t n) { + const char *p = src; + char *q = dst; #if defined(__i386__) || defined(__x86_64__) if (q < p) { __asm__ volatile("cld; rep; movsb" : "+c"(n), "+S"(p), "+D"(q)); @@ -41,19 +41,19 @@ void* memmove(void* dst, const void* src, size_t n) { return dst; } -void* memcpy(void* dst, const void* src, size_t n) { - const char* p = src; - char* q = dst; +void *memcpy(void *dst, const void *src, size_t n) { + const char *p = src; + char *q = dst; #if defined(__i386__) size_t nl = n >> 2; __asm__ volatile("cld ; rep ; movsl ; movl %3,%0 ; rep ; movsb" - : "+c"(nl), "+S"(p), "+D"(q) - : "r"(n & 3)); + : "+c"(nl), "+S"(p), "+D"(q) + : "r"(n & 3)); #elif defined(__x86_64__) size_t nq = n >> 3; __asm__ volatile("cld ; rep ; movsq ; movl %3,%%ecx ; rep ; movsb" - : "+c"(nq), "+S"(p), "+D"(q) - : "r"((uint32_t)(n & 7))); + : "+c"(nq), "+S"(p), "+D"(q) + : "r"((uint32_t)(n & 7))); #else while (n--) { *q++ = *p++; @@ -63,20 +63,20 @@ void* memcpy(void* dst, const void* src, size_t n) { return dst; } -void* memset(void* dst, int c, size_t n) { - char* q = dst; +void *memset(void *dst, int c, size_t n) { + char *q = dst; #if defined(__i386__) size_t nl = n >> 2; __asm__ volatile("cld ; rep ; stosl ; movl %3,%0 ; rep ; stosb" - : "+c"(nl), "+D"(q) - : "a"((unsigned char)c * 0x01010101U), "r"(n & 3)); + : "+c"(nl), "+D"(q) + : "a"((unsigned char)c * 0x01010101U), "r"(n & 3)); #elif defined(__x86_64__) size_t nq = n >> 3; __asm__ volatile("cld ; rep ; stosq ; movl %3,%%ecx ; rep ; stosb" - : "+c"(nq), "+D"(q) - : "a"((unsigned char)c * 0x0101010101010101U), - "r"((uint32_t)n & 7)); + : "+c"(nq), "+D"(q) + : "a"((unsigned char)c * 0x0101010101010101U), + "r"((uint32_t)n & 7)); #else while (n--) { *q++ = c; @@ -86,15 +86,15 @@ void* memset(void* dst, int c, size_t n) { return dst; } -size_t strlen(const char* s) { - const char* ss = s; +size_t strlen(const char *s) { + const char *ss = s; while (*ss) ss++; return ss - s; } -int strcmp(const char* s1, const char* s2) { - const unsigned char* c1 = (const unsigned char*)s1; - const unsigned char* c2 = (const unsigned char*)s2; +int strcmp(const char *s1, const char *s2) { + const unsigned char *c1 = (const unsigned char *)s1; + const unsigned char *c2 = (const unsigned char *)s2; unsigned char ch; int d = 0; @@ -105,3 +105,4 @@ int strcmp(const char* s1, const char* s2) { return d; } + From bfc9911a85c2b9a7b8381e36e86035c58e2b0dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borna=20=C5=A0o=C5=A1tari=C4=87?= Date: Wed, 28 Jan 2026 21:55:01 +0100 Subject: [PATCH 3/3] add strcpy implementation --- klibc/include/string.h | 1 + klibc/src/string.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/klibc/include/string.h b/klibc/include/string.h index ab46b28..843ed88 100644 --- a/klibc/include/string.h +++ b/klibc/include/string.h @@ -10,5 +10,6 @@ extern void *memset(void *dst, int c, size_t n); extern size_t strlen(const char *s); extern int strcmp(const char *s1, const char *s2); +extern char *strncpy(char *dst, const char *src, size_t n); #endif // CLASSICOS_KLIBC_STRING_H diff --git a/klibc/src/string.c b/klibc/src/string.c index f5a4c58..21495ce 100644 --- a/klibc/src/string.c +++ b/klibc/src/string.c @@ -106,3 +106,18 @@ int strcmp(const char *s1, const char *s2) { return d; } +char *strncpy(char *dst, const char *src, size_t n) { + char *q = dst; + const char *p = src; + char ch; + + while (n) { + n--; + *q++ = ch = *p++; + if (!ch) break; + } + + memset(q, 0, n); + + return dst; +}