From a0672be24d53ec78d1a2567cf60d9f774b0d158a Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 4 Jul 2025 02:54:54 +0200 Subject: Do not rely on PSXSDK libc or _start --- src/libc/CMakeLists.txt | 8 ++++++++ src/libc/include/stddef.h | 8 ++++++++ src/libc/include/stdlib.h | 7 +++++++ src/libc/include/string.h | 12 ++++++++++++ src/libc/src/memcmp.c | 12 ++++++++++++ src/libc/src/memcpy.c | 13 +++++++++++++ src/libc/src/memset.c | 7 +++++++ src/libc/src/strchr.c | 11 +++++++++++ src/libc/src/strlen.c | 12 ++++++++++++ 9 files changed, 90 insertions(+) create mode 100644 src/libc/CMakeLists.txt create mode 100644 src/libc/include/stddef.h create mode 100644 src/libc/include/stdlib.h create mode 100644 src/libc/include/string.h create mode 100644 src/libc/src/memcmp.c create mode 100644 src/libc/src/memcpy.c create mode 100644 src/libc/src/memset.c create mode 100644 src/libc/src/strchr.c create mode 100644 src/libc/src/strlen.c (limited to 'src/libc') diff --git a/src/libc/CMakeLists.txt b/src/libc/CMakeLists.txt new file mode 100644 index 0000000..b9bb597 --- /dev/null +++ b/src/libc/CMakeLists.txt @@ -0,0 +1,8 @@ +set(inc "include") +set(src +"src/memcpy.c" +"src/memset.c" +"src/strlen.c" +) +add_library(c ${src}) +target_include_directories(c PUBLIC ${inc}) diff --git a/src/libc/include/stddef.h b/src/libc/include/stddef.h new file mode 100644 index 0000000..123e46f --- /dev/null +++ b/src/libc/include/stddef.h @@ -0,0 +1,8 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +#define NULL ((void *)0) + +typedef unsigned long size_t; + +#endif diff --git a/src/libc/include/stdlib.h b/src/libc/include/stdlib.h new file mode 100644 index 0000000..79d3122 --- /dev/null +++ b/src/libc/include/stdlib.h @@ -0,0 +1,7 @@ +#ifndef _STDLIB_H +#define _STDLIB_H + +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 + +#endif diff --git a/src/libc/include/string.h b/src/libc/include/string.h new file mode 100644 index 0000000..7efda4e --- /dev/null +++ b/src/libc/include/string.h @@ -0,0 +1,12 @@ +#ifndef _STRING_H +#define _STRING_H + +#include + +int memcmp(const void *__s1, const void *__s2, size_t __n); +void *memcpy(void *__dst, const void *__src, size_t __n); +void *memset(void *__dst, int __c, size_t __n); +char *strchr(const char *__s, int __n); +size_t strlen(const char *__s); + +#endif diff --git a/src/libc/src/memcmp.c b/src/libc/src/memcmp.c new file mode 100644 index 0000000..f24d300 --- /dev/null +++ b/src/libc/src/memcmp.c @@ -0,0 +1,12 @@ +#include + +int memcmp(const void *const s1, const void *const s2, const size_t n) +{ + const unsigned char *a = s1, *b = s2; + + for (size_t i = 0; i < n; i++, a++, b++) + if (*a != *b) + return *a - *b; + + return 0; +} diff --git a/src/libc/src/memcpy.c b/src/libc/src/memcpy.c new file mode 100644 index 0000000..7014e63 --- /dev/null +++ b/src/libc/src/memcpy.c @@ -0,0 +1,13 @@ +#include +#include + +void *memcpy(void *const dst, const void *const src, const size_t n) +{ + unsigned char *d = dst; + const unsigned char *s = src; + + for (size_t i = 0; i < n; i++) + *d++ = *s++; + + return dst; +} diff --git a/src/libc/src/memset.c b/src/libc/src/memset.c new file mode 100644 index 0000000..d3f00c1 --- /dev/null +++ b/src/libc/src/memset.c @@ -0,0 +1,7 @@ +#include +#include + +void *memset(void *const dst, const int c, const size_t n) +{ + return NULL; +} diff --git a/src/libc/src/strchr.c b/src/libc/src/strchr.c new file mode 100644 index 0000000..3a1fd0b --- /dev/null +++ b/src/libc/src/strchr.c @@ -0,0 +1,11 @@ +#include +#include + +char *strchr(const char *s, const int n) +{ + for (; *s; s++) + if (*s == n) + return (char *)s; + + return NULL; +} diff --git a/src/libc/src/strlen.c b/src/libc/src/strlen.c new file mode 100644 index 0000000..43efcc5 --- /dev/null +++ b/src/libc/src/strlen.c @@ -0,0 +1,12 @@ +#include +#include + +size_t strlen(const char *s) +{ + size_t ret = 0; + + while (*s++) + ret++; + + return ret; +} -- cgit v1.2.3